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

How to continue a test case when an assertion failed 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();
  });
});

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

这通常是您在单元测试时想要的:如果无论如何都会失败,请尽快进行。 IE。在每个测试函数的第一个问题上失败。此外,后来的测试通常假设较早的测试已通过,例如如果页面标题错误并显示 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);

如果您希望这是所有断言的默认行为,那么破解代码可能是最佳选择! (将 doThrowtrue 的默认值更改为 false。)

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