grunt не запускает тесты QUnit на фантоме

У меня есть репозиторий, интегрированный с 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 в своем браузере, все работает отлично. Но когда я пытаюсь запустить их с уровня ворчания (на стороне сервера с использованием фантомных скриптов), это не удается. Я получил:

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.

все время. Я пытался сделать все так же, как это делается в это руководство, но все же я получаю неправильные результаты (фантом висит вместо того, чтобы обслуживать тесты QUnit)...


person ducin    schedule 22.08.2013    source источник
comment
Я вижу, твой Трэвис проходит мимо. Как вы решили проблему?   -  person Markus    schedule 03.04.2015


Ответы (2)


Я использую grunt-contrib-qunit для запуска тестов QUnit через grunt. Он использует фантомы внутри.

Я получал ту же ошибку, что и OP, после обновления grunt-contrib-qunit до последней версии (0.7.0):

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);
    });
});
person c.hill    schedule 21.01.2016

Это связано с тем, что мост внедряется в страница grunt qunit помещается туда до того, как qunit загружается с помощью requirejs.

А надо после. Так что ваши тесты, вероятно, запускаются, но grunt qunit об этом не знает, потому что не отчитывается.

Я сделал быстрый тест, поместив код моста в конец вашего модуля расширения qunit, и он работал нормально.

Вероятно, вы могли бы создать модуль моста qunit и вызвать его в своем расширении qunit или подобном.

Код с официального бриджа должен нормально работать. Просто убедитесь, что он получен после qunit.

Grunt qunit по-прежнему внедряет скрипт, но просто терпит неудачу, поскольку QUnit не определен, но, вероятно, не нанесет никакого вреда вашим тестам.

person Martin Hansen    schedule 25.08.2013
comment
Итак, что можно сделать, чтобы исправить это? - person funkybro; 02.03.2015