2015-01-21 6 views
5

Mit der integrierten QUnit testen Framweork muss ich testen, ob oder nicht besucht eine Route verursacht einen Fehler geworfen werden.Test für werfen Fehler in Ember.js

Es gibt einen Lenker-Helfer in der Route, der unter bestimmten Bedingungen einen Fehler werfen sollte (fehlgeschlagene Assertion). Wie überprüfe ich, ob dieser Fehler ausgelöst wird? Diese

ist, was ich habe, so weit:

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

Aber es funktioniert nicht, da der Fehler durch throws(...) nicht abgefangen wird und Blasen an den Test-Framework auf, markiert diesen Test als nicht bestanden.

Dies ist der Testausgang:

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) 

Als visit('/missing') kehrt ein Versprechen, würde man annehmen, dass .then(success, error) Verwendung funktionieren würde, aber es funktioniert nicht.

Antwort

10

kam ich auf diese Frage suchen, wie für einen erwarteten Fehler zu testen, wenn eine Komponente macht. Um einen erwarteten Fehler von beispielsweise

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

von Ihrer Komponente zu testen. Dann kann dein Test etwas wie sein:

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

Ab Emmy 2.11 scheint Assert Throws nicht länger ein Ding zu sein. https://github.com/emberjs/ember.js/pull/14898 – snewcomer

1

Wie beschrieben http://api.qunitjs.com/throws/ Sie soll sind dem Aufruf der Funktion einen Rückruf an throws statt zu übergeben.

So:

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