0

我正在尝试使用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 脚本使用它来确定这部分构建是否成功)。

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

4

1 回答 1

0

您是否查看了 phantom js 网站上提供的 qunit runner? https://github.com/ariya/phantomjs/blob/1.2/examples/run-qunit.js

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

于 2012-03-01T22:29:13.457 回答