我有一个与travis集成的repository。我有QUnit测试,我想从grunt / node服务器端和AMD(requirejs)运行。这是我的AMD init.js的来源:
(function () {
require.config({
baseUrl: "../src"
});
require(["../test/suites/basic",
'../test/qunit-extend',
'qunit'
], function(BasicTests) {
QUnit.config.autoload = false;
QUnit.config.autostart = false;
BasicTests.run();
QUnit.load();
QUnit.start();
});
}());
当我在浏览器中运行这些QUnit测试时 - 一切都运行良好。但是当我尝试从grunt级别(使用phantomjs的服务器端)运行它们时,it fails。我明白了:
Running "qunit:all" (qunit) task
Testing test/index.html
Warning: PhantomJS timed out, possibly due to a missing QUnit start() call. Use --force to continue.
一直以来。我试图像在this tutorial中那样做同样的事情,但我仍然得到错误的结果(幻影被绞死而不是服务QUnit测试)......
答案 0 :(得分:2)
我正在使用grunt-contrib-qunit通过grunt运行QUnit测试。它在内部使用phantomjs。
在将grunt-contrib-qunit升级到最新版本(0.7.0)后,我得到了与OP相同的错误:
PhantomJS timed out, possibly due to a missing QUnit start() call.
要解决此问题,我必须首先通过require()
加载QUnit,然后执行QUnit.start()
并在此之后定义我的所有QUnit模块和测试。
HTML文件如下所示:
<!DOCTYPE html>
<html>
<head>
<title>QUnit + RequireJS + PhantomJS</title>
<link rel="stylesheet" href="lib/qunit/qunit/qunit.css">
</head>
<body>
<div id="qunit"></div>
<div id="qunit-fixture"></div>
<script src="lib/requirejs/require.js"></script>
<script src="mytests.js"></script>
</body>
</html>
然后是mytests.js
文件:
require.config({
paths: {
'qunit': 'lib/qunit/qunit/qunit'
}
});
require(['qunit'], function(QUnit) {
QUnit.start();
QUnit.module('My Module');
QUnit.test('some normal test', function(assert) {
assert.ok(true, 'can run a normal QUnit test');
});
QUnit.test('some asynchronous test', function(assert) {
var done = assert.async();
setTimeout(function() {
assert.ok(true, 'can run an asynchronous QUnit test');
done();
}, 50);
});
});
答案 1 :(得分:1)
这是因为grunt qunit注入页面的bridge在requirens加载qunit之前放在那里。
它需要追随。所以你的测试可能会运行,但是grunt qunit不知道它,因为它没有报告回来。
我做了一个快速测试,将桥代码放在你的qunit扩展模块的最后,它工作正常。
您可以创建一个qunit桥接模块,并在您的qunit扩展或类似中调用它。
官方桥梁的代码应该可以正常工作。确保在qunit之后获取它。
Grunt qunit仍然会注入脚本但是因为QUnit未定义而失败,但可能不会对你的测试造成任何伤害。