2015-01-03 12 views
5

Gibt es eine Möglichkeit, eine Testsuite fortzusetzen, wenn ein Fehler auftritt? Am Beispiel:Wie wird ein Testfall fortgesetzt, wenn eine Assertion in CasperJS fehlgeschlagen ist?

casper.test.begin("",3,function suite(){ 
    casper.start(url).then(function(){ 
    test.assert(...); 
    test.assert(...); //If this assert fail, the script stop and the third assert isn't tested 
    test.assert(...); 
    }).run(function(){ 
    test.done(); 
    }); 
}); 

ich alle behaupten wollen getestet werden, auch wenn einige scheitern. Ist es möglich?

+0

Für Einheit dieses Verhalten testen, was Sie würden in der Regel wollen. Sie können den "Verifikations" -Ansatz verwenden, der die Testausführung überprüft, aber nicht stoppt (wie in der Antwort unten vorgeschlagen). Wenn Sie diese Situation beschreiben, werden normalerweise Signale über schlechtes Testdesign angezeigt. In einem Test zu viel testen. Die Lösung würde in separate Tests aufgeteilt werden. – buxter

Antwort

6

Siehe in casperjs google group post. Wir können umgeben die Assertion mit dem casper.then(..

Dieser Folge Code funktioniert wie ich will (aber auf diese Weise nicht vielleicht die beste?)

casper.test.begin("",3,function suite(){ 
    casper.start(url).then(function(){ 
    casper.then(function(){ 
     test.assert(...); //if fail, this suite test continue 
    }); 
    casper.then(function(){ 
     test.assert(...); //so if assert(1) fail, this assert is executed 
    }); 
    casper.then(function(){ 
     test.assert(...); 
    }); 
    }).run(function(){ 
     test.done(); 
    }); 
}); 
+0

Für ein paar Test ist dies schlimmer als Darren Vorschlag, aber wenn Sie ein Framework auf CasperJS für das Testen Ihrer Website bauen, ist dies wahrscheinlich ein sauberer Ansatz. –

4

Dies ist normalerweise, was Sie wollen, wenn Unit-Tests: Wenn es sowieso scheitern wird, tun Sie es schnell. I.e. bei dem ersten Problem in jeder Testfunktion fehlschlagen. Spätere Tests gehen üblicherweise davon aus, dass frühere Tests bestanden, z. Wenn der Seitentitel falsch ist und 404 heißt, gibt es keinen Sinn zu testen, dass die richtige Anzahl von Bildern auf der Seite ist.

Ich vermute, Sie dies wollen, so dass Sie weitere Informationen in den Testergebnissen zu bekommen, und ein Weg, dies zu tun wäre, einen einzigen assert und eine benutzerdefinierte Fehlermeldung zu verwenden:

var title = this.getTitle(); 
var linkText = this.getHTML('a#testLink'); 
this.assert(title == "MyPage" && linkText == "continue", 
    "title=" + title + ";a#testLink = " + linkText); 

Aber das kann unordentlich werden. Wenn Sie die ganze Macht der assert Familie von Funktionen verwenden möchten, und haben sie nicht werfen, sondern auch weiterhin, eine Studie von the source code zeigt, dass dies funktionieren könnte:

test.assert(false, null, {doThrow:false}); 
test.assertEquals(1 == 2, null, {doThrow:false}); 
test.assertEquals(2 == 2); 

Und wenn Sie dies sein wollen Standardverhalten auf alle Ihre Behauptungen, nun, Hacking der Code könnte die beste Wahl sein! (Ändern Sie den Standardwert true für doThrow zu false.)

+0

Ich finde nur eine andere Lösung =) Ich schreibe dies – user2137454

+0

Ja, das ist eine andere Möglichkeit, gut zu finden. –