我正在尝试使用PhantomJS从 Ant 构建脚本中运行一组异步 QUnit 测试。我所拥有的似乎正在工作,但似乎应该有更好的方法来实现它。
PhantomJS 加载时运行的脚本(简化)如下:
var page = require("webpage").create();
page.onConsoleMessage = function(msg) {
if(msg.indexOf("FINISHED") > -1) {
var failed = msg.split(" ");
phantom.exit(failed[1]);
}
};
page.open("testrunner.html", function() {
page.evaluate(function() {
QUnit.done = function(result) {
console.log("FINISHED " + result.failed);
};
});
});
这将加载包含测试 ( testrunner.html
) 的文件。它使用 PhantomJSevaluate
方法在加载页面的上下文中运行一些代码。该代码将事件处理程序绑定到 QUnitdone
事件。在事件处理程序中,所发生的只是对console.log
.
默认情况下, PhantomJS 不对console.log
调用执行任何操作,因此我还为 PhantomJSonConsoleMessage
事件绑定了一个事件处理程序。当事件处理程序中的console.log
调用QUnit.done
被执行时,onConsoleMessage
事件被触发。如果控制台消息匹配给定的字符串,那么我们知道测试已经完成运行。然后我们可以退出 PhantomJS,退出代码等于失败的单元测试的数量(Ant 脚本使用它来确定这部分构建是否成功)。
我的问题是,有没有更好的方法来找出单元测试何时完成运行?