Тест на выдачу ошибок в Ember.js

Используя встроенный тестовый framweork QUnit, мне нужно проверить, не посещает ли маршрут, вызывает ли это ошибку.

В маршруте есть помощник Handlebars, который должен выдавать ошибку при определенных условиях (неудачное утверждение). Как проверить, выдается ли эта ошибка?

Это то, что я получил до сих пор:

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, броски утверждений больше не нужны. 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