Тест за хвърляне на грешки в Ember.js

Използвайки интегрираната рамка за тестване на QUnit, трябва да тествам дали посещението или непосещението на маршрут причинява извеждане на грешка.

В маршрута има помощник на кормилото, който трябва да изведе грешка при определени условия (неуспешно твърдение). Как да тествам дали се появява тази грешка?

Ето какво получих досега:

test('throws, if the SVG is missing', function() {
  throws(visit('/missing'), Error, "has thrown an Error");
});

Но не работи, тъй като грешката не е уловена от throws(...) и се появява в рамката за тестване, маркирайки този тест като неуспешен.

Това е резултатът от теста:

Died on test #1     at http://localhost:7357/assets/dummy.js:304:5
    at requireModule (http://localhost:7357/assets/vendor.js:77:29)
    at http://localhost:7357/assets/test-loader.js:14:29: Assertion Failed: No SVG found for this/svg/is/missing
Source:     
Error: Assertion Failed: No SVG found for this/svg/is/missing
    at new Error (native)
    at Error.EmberError (http://localhost:7357/assets/vendor.js:27463:23)
    at Object.Ember.assert (http://localhost:7357/assets/vendor.js:17077:15)
    at inlineSvg (http://localhost:7357/assets/dummy.js:94:13)
    at Object.bindView.normalizedValue (http://localhost:7357/assets/vendor.js:20498:21)
    at Object.SimpleHandlebarsView.render (http://localhost:7357/assets/vendor.js:23450:26)
    at EmberRenderer_createElement [as createElement] (http://localhost:7357/assets/vendor.js:52738:16)
    at EmberRenderer.Renderer_renderTree [as renderTree] (http://localhost:7357/assets/vendor.js:23840:24)
    at EmberRenderer.<anonymous> (http://localhost:7357/assets/vendor.js:23917:16)
    at DeferredActionQueues.invoke (http://localhost:7357/assets/vendor.js:13891:18)

Тъй като visit('/missing') връща обещание, човек би предположил, че използването на .then(success, error) ще работи, но не е така.


person buschtoens    schedule 21.01.2015    source източник


Отговори (2)


Стигнах до този въпрос, търсейки как да тествам за очаквана грешка, когато даден компонент се изобразява. За да проверите за очаквана грешка, например

throw new Error('I am an error');

от вашия компонент. Тогава вашият тест може да бъде нещо като:

test('my-component should throw an error', function(assert) {
  assert.expect(1);

  assert.throws(() => {
    this.render(hbs`{{my-component myVariable="XYZ"}}`);
  }, new Error('I am an error'), 'Expect an error with this message');
});
person Adam Knights    schedule 16.12.2015
comment
Считано от Ember 2.11, assert хвърлянията изглежда вече не са нещо. github.com/emberjs/ember.js/pull/14898 - person snewcomer; 09.04.2017

Както е описано на http://api.qunitjs.com/throws/, вие трябва да преминете обратно извикване към throws вместо извикване на функцията.

So:

test('throws, if the SVG is missing', function() {
  throws(function() {visit('/missing')}, Error, "has thrown an Error");
});
person joostdevries    schedule 21.01.2015