2013-08-22 4 views
6

Ich habe eine repository, die in Travis integriert ist. Ich habe QUnit-Tests, die ich von Grunt/Node-Server-Seite und AMD (Requirejs) ausführen möchte. Dies ist die Quelle meiner AMD Init.js:grunt nicht ausgeführt QUnit Tests auf Phantom

(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(); 
    }); 
}()); 

Als ich diese QUnit Tests in meinem Browser laufen - alles perfekt funktioniert. Aber wenn ich versuche, sie aus der Grunt Ebene (serverseitig mit Phantomjs) zu starten, it fails. Ich bekomme:

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. 

die ganze Zeit. Ich habe versucht, evetyrhing die gleiche Art und Weise zu tun, wie es in this tutorial getan hat, aber ich habe immer noch falsch Ergebnisse (Phantom statt gehängt QUnit Tests dienen) ...

+1

ich Ihre travis sehen vorbei ist. Wie hast du das Problem gelöst? – Markus

Antwort

1

Es ist, weil die bridge, die in der Seite von Grunzen QUnit injiziert wird wird dort platziert, bevor qunit von requirejs geladen wird.

Und es muss danach sein. So laufen deine Tests wahrscheinlich, aber grunt qunit weiß nichts darüber, weil er nicht zurückmeldet.

Ich habe einen schnellen Test durchgeführt, indem ich den Bridge-Code am Ende in Ihrem Qunn-Erweiterungsmodul platziert habe und es hat gut funktioniert.

Sie könnten wahrscheinlich ein qunit Bridge-Modul erstellen und das auch in Ihrem qunit extend oder ähnlichem aufrufen.

Der Code von der offiziellen Brücke sollte gut funktionieren. Stellen Sie nur sicher, dass es nach dem Quitt abgerufen wird.

Grunt qunit wird immer noch das Skript einfügen, aber nur fehlschlagen, da QUnit nicht definiert ist, aber wahrscheinlich nicht schaden wird Ihre Tests.

+4

Also was kann man tun, um das zu beheben? – funkybro

2

Ich benutze grunt-contrib-qunit, um QUnit Tests über Grunt laufen zu lassen. Es verwendet phantomjs intern.

ich die gleichen Fehler wie die OP immer nach Grunzen-contrib-QUnit auf die neueste Version (0.7.0) Upgrade:

PhantomJS timed out, possibly due to a missing QUnit start() call.

um dieses Problem zu beheben, musste ich zuerst Last QUnit über require() und dann QUnit.start() ausführen und alle meine QUnit Module und Tests danach definieren.

Die HTML-Datei sieht wie folgt aus etwas:

<!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> 

Dann wird die mytests.js Datei:

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); 
    }); 
});