在PhantomJS中从Ant运行异步QUnit测试

时间:2012-02-28 09:21:47

标签: javascript qunit phantomjs

我正在尝试使用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)。它使用PhantomJS evaluate方法在加载页面的上下文中运行一些代码。该代码将事件处理程序绑定到QUnit done事件。在事件处理程序中,所有发生的事情都是对console.log的简单调用。

默认情况下,PhantomJS对console.log调用不执行任何操作,因此我还将事件处理程序绑定到PhantomJS onConsoleMessage事件。执行console.log事件处理程序中的QUnit.done调用时,会触发onConsoleMessage事件。如果控制台消息与给定字符串匹配,那么我们就知道测试已经完成运行。然后我们可以退出PhantomJS,退出代码等于失败的单元测试的数量(Ant脚本使用它来确定构建的这一部分是否成功)。

我的问题是,有没有更好的方法来确定单元测试何时完成运行?

1 个答案:

答案 0 :(得分:0)

您是否检查过幻影js网站上提供的qunit runner? https://github.com/ariya/phantomjs/blob/1.2/examples/run-qunit.js

基本上你只需将它指向你的qunit测试页面(testrunner.html),它就会抓取页面以查看是否有任何失败并将结果输出到控制台。您可以修改它以打印到一个文件,然后将其集成到您的构建脚本中。