Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在PhantomJS中从Ant运行异步QUnit测试_Javascript_Qunit_Phantomjs - Fatal编程技术网

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

Javascript 在PhantomJS中从Ant运行异步QUnit测试,javascript,qunit,phantomjs,Javascript,Qunit,Phantomjs,我正在尝试使用从Ant构建脚本运行一组异步QUnit测试。我所拥有的似乎正在发挥作用,但似乎应该有更好的方法来实现它 加载PhantomJS时运行的脚本(简化)如下所示: var page = require("webpage").create(); page.onConsoleMessage = function(msg) { if(msg.indexOf("FINISHED") > -1) { var failed = msg.split(" ");

我正在尝试使用从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
事件。当执行
quonit.done
事件处理程序中的
console.log
调用时,将触发
onConsoleMessage
事件。如果控制台消息与给定的字符串匹配,则我们知道测试已完成运行。然后,我们可以退出PhantomJS,退出代码等于失败的单元测试的数量(Ant脚本使用它来确定构建的这一部分是否成功)


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

您是否查看了phantom js webiste上提供的qunit runner


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

谢谢,我还没有看到这一点。但是,它看起来很像我已经在做的事情,只是将
onsolemessage
回调切换为
setTimeout
循环,等待某个条件为真,或者等待一段时间过去。我真的希望避免类似的事情(例如,1个问题-如果出于某种原因,请求花费的时间超过了允许的最长时间怎么办?),这就是我现在使用的
OnConsolleMessage
事件方法的原因。我同意,您的方法更简洁,因为您可以知道测试何时完成(给定
quonit.done
回调)。我可以看到
waitFor
方法在您不这样做的情况下非常有用,比如当您等待页面上的元素可见时。实际上,我正在做一些与您所做的非常类似的事情,除了我没有指向qunit测试页面,而是指向我站点上的页面,在页面中注入我的qunit测试,这样我就可以在html/js上进行集成测试。