2013-08-22 15 views
6

Mam repository, który jest zintegrowany z travis. Mam testy QUnit, które chciałbym uruchomić od strony węzła/serwera węzła i AMD (requirejs). To jest źródło mojego AMD init.js:grunt nie działa QUnit testy na 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(); 
    }); 
}()); 

Po uruchomieniu tych testów QUIT w mojej przeglądarce - wszystko działa idealnie. Ale kiedy próbuję uruchomić je z poziomu poziomu (po stronie serwera przy użyciu phantomjs), it fails. Dostaję:

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. 

cały czas. Starałem się zrobić evetyrhing w ten sam sposób, jak to się robi w this tutorial, ale wciąż mam złe wyniki (fantom jest powieszony zamiast służąc testy QUnit) ...

+1

widzę swoją travis przemija. Jak rozwiązałeś problem? – Markus

Odpowiedz

1

To dlatego w bridge który jest wstrzykiwany do strony przez grunt qunit jest tam umieszczony zanim qunit zostanie załadowany przez requirejs.

I musi być po. Więc twoje testy prawdopodobnie biegną, ale chrząszcza qunit nie wie o tym, ponieważ nie zgłasza się z powrotem.

Zrobiłem szybki test umieszczając kod mostu na końcu w module rozszerzającym qunit i działało dobrze.

Prawdopodobnie można utworzyć moduł mostu qunit i wywołać to również w rozszerzeniu qunit lub podobnym.

Kod z oficjalnego mostka powinien działać poprawnie. Upewnij się, że jest pobierany po qunit.

Grunt qunit nadal będzie wstrzykiwał skrypt, ale po prostu nie działa, ponieważ QUnit jest niezdefiniowany, ale prawdopodobnie nie zaszkodzi testom.

+4

Co można zrobić, aby to naprawić? – funkybro

2

Używam grunt-contrib-qunit do uruchamiania testów QUnit przez pomruk. Wykorzystuje phantomjs wewnętrznie.

byłem coraz ten sam błąd co OP po uaktualnieniu grunt-contrib-qunit do najnowszej wersji (0.7.0):

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

Aby rozwiązać ten problem, miałem do pierwszego QUnit obciążenia przez require(), a następnie wykonaj QUnit.start() i po tym zdefiniuj wszystkie moje moduły i testy QUnit.

plik HTML, który wygląda mniej więcej tak:

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

Następnie mytests.js file:

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