2015-01-21 3 views
5

Использование интегрированного теста QUnit для фреймворков, который требуется проверить или не посетить маршрут, вызывает ошибку.Испытание на выброс Ошибок в Ember.js

В маршруте есть хелпер 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) будет работать, но это не так.

ответ

10

Я пришел на этот вопрос ищу как проверить ожидаемую ошибку, когда компонент делает. Для проверки ожидаемой ошибки, например,

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'); 
}); 
+0

Как у Ember 2.11, утверждают, что выбросы больше не являются вещами. https://github.com/emberjs/ember.js/pull/14898 – snewcomer

1

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

Итак:

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