2015-01-03 27 views
5

Bir hata oluştuğunda test paketine devam etmenin bir yolu var mı? Örneğin By :CasperJS'de bir onaylama başarısız olduğunda bir test vakasına nasıl devam edilir?

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

Bütün assert isteyen bazı başarısız olsa dahi, test edilir. Mümkün mü?

+0

istediğiniz genellikle olacaktınız. Test yürütmeyi (ancak aşağıdaki yanıtta önerildiği gibi) kontrol eden ancak durdurmayan “doğrulama” yaklaşımını kullanabilirsiniz. Bu gibi bir durumun olması, genellikle kötü test tasarımıyla ilgili sinyalleri tanımlar. Bir testte çok fazla test var. Çözüm, ayrı testlere bölünmüş olurdu. – buxter

cevap

6

Bkz. casperjs google group post. Biz İstediğim gibi bu takip kodu çalışır casper.then(..

ile assert çevirebilirsiniz (ancak bu şekilde belki iyi değil?) Bu davranışı test birimi için

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

Birkaç test için bu, Darren'ın önerisinden daha kötüdür, ancak web sitenizi test etmek için CasperJS'in üzerine bir çerçeve oluşturduğunuzda, bu muhtemelen daha temiz bir yaklaşımdır. –

4

Bu, ünite testi sırasında normalde ne istediğinizi: eğer yine de başarısız olursa, hızlıca yapın. Yani Her test fonksiyonunda ilk problemde başarısız olur. Ayrıca, daha sonraki testler genellikle önceki testlerin geçtiğini, örn. Sayfa başlığı yanlışsa ve 404 ifadesi varsa, sayfada doğru sayıda görüntü olduğunu belirten bir nokta yoktur.

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

Ama bu:

seni daha fazla test sonuçlarındaki bilgileri ve tek assert ve özel bir hata iletisi kullanmak olacağını yapmanın bir yolunu alabilmeleri Bunu ister tahmin ediyorum dağınık olabilir.

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

Ve isterseniz bu olması: Eğer fonksiyonların assert ailesinin tüm gücünü kullanmak değil, onları atmak zorunda, ancak bunun yerine devam etmek istiyorsanız, the source code bir çalışma bu işe yarayabilecek göstermektedir Tüm önerilerinizde varsayılan davranış, iyi, kodu kesmek en iyi seçim olabilir! (false olmak üzere doThrow için true varsayılanını değiştirin.)

+0

Sadece başka bir çözüm buluyorum =) Bu – user2137454

+0

yazdım Evet, başka bir yoldur, iyi bulmak. –