1

我正在使用 casper tester 模块,我有这个结构:

casper.start();

...(various then() and wait() calls)

casper.then(function(){
  test.done();
  });
casper.run();

这样做似乎工作正常(除了我一直试图解决的间歇性计时器问题)。

如果我更改以上内容,则显示在 casper docs中,并且我认为基本相同:

casper.start();

...(various then() and wait() calls)

casper.run(function(){
  test.done();
  });

然后我得到“警告看起来你没有运行任何测试。”。我意识到这是因为我还没有任何assert()电话!我添加了一个免费的断言,警告就消失了,现在我开始得到一个关于运行了多少测试的报告,等等。(间歇性计时器问题仍然存在,所以那一定是别的东西。)

但这让我意识到我应该用第二种方式来做,而且很明显是有区别的。

有人可以解释一下有什么区别,为什么第一个不能正常工作?我希望它会加深对 CasperJS 测试如何工作的理解!

4

1 回答 1

0

你的 final then()(包含对 的调用done())在被调用时还没有完成——它还有一个函数要调用done()

另一方面,run()当所有前面的步骤完全完成时,该函数会执行它的回调。来自文档:“您可以考虑在所有其他步骤都已执行后执行的自定义最后一步。”

在大多数情况下,这不应该有所作为,因为 done() 可能是您的最后一步 final then。例如,如果检查所有步骤是否已完成,这可能会有所不同。done

来源: http ://casperjs.readthedocs.org/en/latest/modules/casper.html#run

于 2015-09-04T00:36:23.140 回答