6

我有一个与 travis 集成的存储库。我有 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 的服务器端)运行它们时,它失败了。我得到:

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.

每时每刻。我试图以与本教程中相同的方式进行 evetyrhing ,但仍然得到错误的结果(幻像被绞死而不是提供 QUnit 测试)......

4

2 回答 2

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.

为了解决这个问题,我必须首先通过加载 QUnit require(),然后执行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);
    });
});
于 2016-01-21T16:21:50.483 回答
1

这是因为 grunt qunit 注入到页面中的是在 qunit 被 requirejs 加载之前放置在那里的。

它需要在之后。所以你的测试可能会运行,但 grunt qunit 不知道它,因为它不会报告。

我做了一个快速测试,将桥代码放在你的 qunit 扩展模块的末尾,它工作正常。

您可能可以创建一个 qunit 桥模块并在您的 qunit 扩展或类似中调用它。

来自官方网桥的代码应该可以正常工作。只要确保它是在 qunit 之后获取的。

Grunt qunit 仍然会注入脚本,但由于 QUnit 未定义而失败,但可能不会对您的测试造成任何伤害。

于 2013-08-25T20:06:10.477 回答