2015-01-03 10 views
5

C'è un modo per continuare una suite di test quando si verifica un errore? Di Esempio:Come continuare un caso di test quando un'affermazione non è riuscita in CasperJS?

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(); 
    }); 
}); 

Voglio che tutti assert sono testati, anche se alcuni non riescono. È possibile?

+0

Per Unit Testing questo comportamento è ciò che di solito vuole. Potresti usare un approccio di "verifica", che controlla ma non interrompe l'esecuzione del test (come suggerito nella risposta sotto). Avendo questa situazione come te descrivi di solito segnali sulla cattiva progettazione del test. Test troppo in una volta. La soluzione sarebbe divisa in test separati. – buxter

risposta

6

veda in casperjs google group post. Possiamo circondiamo l'asserzione con l'casper.then(..

Questo codice follow funziona come voglio (ma in questo modo non è forse il migliore?)

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

Per alcuni test questo è peggio del suggerimento di Darren, ma quando costruisci un framework su CasperJS per testare il tuo sito web, questo è probabilmente un approccio più pulito. –

4

Questo è normalmente ciò che si desidera quando si esegue il test dell'unità: in caso contrario, esegui rapidamente. Cioè fallire al primo problema in ogni funzione di test. Inoltre, i test successivi generalmente presuppongono che i test precedenti siano passati, ad es. se il titolo della pagina è errato e dice 404, non c'è motivo di verificare che il numero corretto di immagini sia sulla pagina.

sto indovinando si desidera che questo modo che è possibile ottenere ulteriori informazioni nei risultati del test, e un modo per farlo sarebbe quello di utilizzare un solo affermare e un messaggio di errore personalizzato:

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

Ma questo può diventare disordinato Se si desidera utilizzare tutta la potenza del assert famiglia di funzioni, e non li hanno buttare, ma invece proseguire, uno studio di the source code dimostra che questo potrebbe funzionare:

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

E se si vuole che questa sia la comportamento predefinito su tutti i tuoi asserimenti, beh, l'hacking del codice potrebbe essere la scelta migliore! (Modificare il valore predefinito di true per doThrow essere false.)

+0

Ho appena trovato un'altra soluzione =) Scrivo questo – user2137454

+0

Sì, questo è un altro modo, buona scoperta. –

Problemi correlati