grunt没有在幻像上运行QUnit测试

时间:2013-08-22 23:40:12

标签: javascript phantomjs gruntjs qunit

我有一个与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测试)......

2 个答案:

答案 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未定义而失败,但可能不会对你的测试造成任何伤害。