我写了一个小脚本,从磁盘加载我的SpecRunner.html(jasmine单元测试)。 虽然一切看起来都很好,但测试不会执行。 这是我的代码:
var page = require('webpage').create()
, file = "./SpecRunnerCoverage.html" ;
page.open(file, function (status) {
var json = page.evaluate(function () {
return window._yuitest_coverage;
});
console.log(JSON.stringify(json));
phantom.exit();
});
执行如下:
$> phantomjs myScript
从代码覆盖率数据我可以看出没有执行测试。无论如何我可以执行这些测试吗?
非常感谢
更新:我刚刚注意到,当我在evaluate函数周围包装一个setTimeout并延迟整个过程时,它可以工作。有没有比setTimeout更好的解决方案?
答案 0 :(得分:1)
调用window.onload
时,jasmine引导过程开始运行测试,因此在调用幻像页面加载回调时,您的规范不一定会完成。通过使用setTimeout
,您可以在页面加载后让时间在浏览器中运行测试。 setTimeout
仍然可能很脆弱,因为当你添加更多规格时,运行整个套件所需的时间会发生变化,你当前的超时时间可能不足以让套件完成。
如果您的项目可以具有ruby依赖项,则可以使用jasmine ruby gem。 gem包含一个rake任务rake jasmine:ci
,它将使用您的测试启动服务器并使用幻像加载页面并等待所有规范完成并将故障打印到命令行。