2014-03-01 14 views
15

Ich bin vertraut mit Python-Unittest-Tests, wo, wenn eine Assertion fehlschlägt, dieser Test als "fehlgeschlagen" markiert ist und es zu anderen Tests weitergeht. Jasmine wird auf der anderen Seite alle Erwartungen fortsetzen, selbst wenn einer von ihnen versagt. Wie kann ich Jasmine die Verarbeitung eines Tests stoppen lassen, nachdem die erste Erwartung fehlgeschlagen ist?Stoppen Jasmin-Test nach ersten erwartet fehlschlägt

it ("shouldn't need to test other expects if the first fails", function() { 
    expect(array.length).toBe(1); 

    // don't need to check this if the first failed. 
    expect(array[0]).toBe("foo"); 
}); 

Ich denke darüber falsch? Ich habe einige Tests mit vielen expect und es scheint wie eine Verschwendung, alle Stack-Spuren zu zeigen, wenn nur der erste wirklich falsch ist.

+1

Wenn Sie pro Test so viel angeben, testet Ihr Code jedes Mal zu viel. Es mag einfacher sein, auf diese Weise zu entwickeln, aber es ist viel schwieriger zu wissen, wo das Problem liegt, wenn die Tests in der Zukunft fehlschlagen (auch, ist es der Punkt der Tests, nein?) Um dem zukünftigen Entwickler zu sagen, er erstellt ein Käfer). Ich finde es nützlich, dass Jasmine nicht auf die erste wartet, es zeigt, dass alles schief gelaufen ist, anstatt was zuerst schief gelaufen ist. Wie auch immer, wie für die Frage an sich, ich habe ein bisschen geschaut und habe nichts gefunden, um es nach dem ersten Scheitern aufzugeben. – acdcjunior

Antwort

7

Jasmine unterstützt nicht früh, in einer einzigen Spezifikation. Die Idee ist, Ihnen alle Fehler zu geben, falls Sie herausfinden, was in Ihrer Spezifikation wirklich falsch ist.

+1

Was schlägst du in Situationen wie OPs vor? Sollten wir dies mit einem if after expect (array.length) .toBe (1) überprüfen, und früh zurückkommen? – erkangur

7

@ Greggs Antwort war korrekt für die neueste Version von Jasmine zu dieser Zeit (v2.0.0).

Da jedoch dann, diese neue Funktion war added in v2.3.0:

Benutzern eine Spezifikation Ausführung zu stoppen, wenn eine Erwartung nicht (Fixes #577)

durch Zugabe aktiviert ist throwFailures=true zu der Query-String der Runner-Seite, zB:

http://localhost:8000/?throwFailures=true 
+1

Um die neue Funktion in node.js zu verwenden, setzen Sie '" stopSpecOnExpectationFailure ": true' auf der obersten Ebene von' jasmine.json' oder führen Sie 'jasmine -stop-on-failure = true' aus (verwirrend nur' --stop "on-failure" wird stillschweigend ignoriert. Wenn angegeben, überschreibt Flag die Konfiguration. –

+3

@ beni-cherniavsky-paskin @tachyonvortex, aber die Verwendung von 'stopSpecOnExpectationOnFailure' stoppt die gesamte Reihe von Tests ... gibt es eine Möglichkeit, * nur * ein einzelnes' it' (Test) zu stoppen? –

0

Acc Ich habe gerade angefangen das Geodreieck-jasmine2-Fail-Wal zu verwenden, weil es scheint mehr Funktionen haben https://github.com/radialanalytics/protractor-jasmine2-fail-whale https://github.com/Updater/jasmine-fail-fast

: ording zu den Kommentaren von https://github.com/jasmine/jasmine/issues/414 habe ich herausgefunden, dass zwei Lösungen für diese besteht. Obwohl ich im Falle von Testversagen Screenshots machen möchte, benutze ich zur Zeit den Winkelmesser-Jasmine2-html-Reporter.

Verwandte Themen