发生故障时是否有办法继续测试套件? 例如:
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();
});
});
我希望所有断言都经过测试,即使有些失败。有可能吗?
答案 0 :(得分:6)
见casperjs google group post。我们可以用casper.then(..
以下代码就像我想要的那样(但这种方式可能不是最好的吗?)
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();
});
});
答案 1 :(得分:4)
这通常是您在单元测试时所需要的:如果它无论如何都会失败,请快速完成。即在每个测试功能的第一个问题失败。此外,后来的测试通常假设早期测试通过,例如,如果页面标题错误并且说404,则无法测试页面上是否有正确数量的图像。
我猜你想要这样,以便你可以在测试结果中获得更多信息,一种方法是使用单个断言和自定义错误消息:
var title = this.getTitle();
var linkText = this.getHTML('a#testLink');
this.assert( title == "MyPage" && linkText == "continue",
"title=" + title + ";a#testLink = " + linkText);
但这可能会变得混乱。如果你想使用assert
系列函数的所有功能,而不是让它们抛出,而是继续,对the source code的研究表明这可能有用:
test.assert(false, null, {doThrow:false} );
test.assertEquals(1 == 2, null, {doThrow:false} );
test.assertEquals(2 == 2);
如果你希望这是你所有断言的默认行为,那么黑客攻击代码可能是最好的选择! (将true
的{{1}}默认值更改为doThrow
。)