2015-01-21 16 views
5

Korzystanie ze zintegrowanego testowania QUnit framweork Muszę przetestować czy nie odwiedzam trasy powodującej błąd.Test rzucania błędów w Ember.js

Na trasie znajduje się pomocnik Handlebars, który powinien podać błąd pod pewnymi warunkami (Asercja zakończona niepowodzeniem). Jak mogę przetestować czy nie wystąpił ten błąd?

To, co mam do tej pory:

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

Ale to nie działa, gdy błąd nie zostanie złapany przez throws(...) i bąbelki do testowania ramy, znakowanie ten test jako zakończonego niepowodzeniem.

To wyjście Test:

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) 

Jako visit('/missing') powraca obietnica, by przypuszczać, że za pomocą .then(success, error) będzie działać, ale tak nie jest.

Odpowiedz

10

przyszedłem na to pytanie szuka sposobu, aby przetestować dla oczekiwanego błędu gdy składnik renderuje. Aby przetestować, czy nie wystąpił oczekiwany błąd, powiedzmy,

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

ze swojego komponentu. Wtedy twój test może wyglądać następująco:

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

Od Ember 2.11, rzuty assert wydają się już nie być rzeczą. https://github.com/emberjs/ember.js/pull/14898 – snewcomer

1

Zgodnie z opisem podanym na http://api.qunitjs.com/throws/ powinieneś przekazać wywołanie zwrotne pod numer throws zamiast wywoływać funkcję.

Więc:

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