0

我编写了一个小脚本,它从磁盘加载我的 SpecRunner.html(茉莉单元测试)。尽管一切看起来都很好,但测试并未执行。这是我的代码:

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

从代码覆盖率数据中我可以看出没有执行任何测试。无论如何我可以执行这些测试吗?

非常感谢

更新:我刚刚注意到,当我在评估函数周围包裹一个 setTimeout 并延迟整个过程时,它可以工作。有比 setTimeout 更好的解决方案吗?

4

1 回答 1

1

jasmine 启动过程在window.onload被调用时开始运行测试,因此在调用幻像页面加载回调时,您的规范不一定已经完成。通过使用 a setTimeout,您可以在页面加载后有时间在浏览器中运行测试。仍然可能很脆弱,setTimeout因为随着您添加更多规范,运行完整套件所需的时间会发生变化,并且您当前的超时持续时间可能不足以让套件完成。

如果您的项目可以具有 ruby​​ 依赖项,则可以使用jasmine ruby​​ gem。gem 包含一个 rake 任务rake jasmine:ci,它将使用您的测试启动服务器并使用 phantom 加载页面并等待所有规范完成并将失败打印到命令行。

于 2014-01-26T20:00:00.053 回答