如何在CasperJS中断言失败时继续测试用例?

时间:2015-01-03 23:08:31

标签: javascript testing casperjs assert

发生故障时是否有办法继续测试套件? 例如:

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

我希望所有断言都经过测试,即使有些失败。有可能吗?

2 个答案:

答案 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。)