2013-08-22 23 views
6

Tôi đã có một repository được tích hợp với travis. Tôi đã có các bài kiểm tra QUnit mà tôi muốn chạy từ phía máy chủ grunt/node và AMD (requirejs). Đây là nguồn của init.js AMD của tôi:grunt không chạy kiểm tra QUnit trên 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(); 
    }); 
}()); 

Khi tôi chạy các kiểm tra QUnit trong trình duyệt của mình - mọi thứ hoạt động hoàn hảo. Nhưng khi tôi cố gắng chạy chúng từ cấp độ grunt (phía máy chủ sử dụng phantomjs), it fails. Tôi nhận được:

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. 

mọi lúc. Tôi đã cố gắng để làm evetyrhing giống như cách nó được thực hiện trong this tutorial, nhưng tôi vẫn nhận được kết quả sai (phantom được treo cổ thay vì phục vụ kiểm tra QUnit) ...

+1

tôi thấy travis của bạn đã qua. Làm thế nào bạn giải quyết vấn đề? – Markus

Trả lời

1

Đó là vì bridge được tiêm vào trang của grunt qunit được đặt ở đó trước khi qunit được nạp bởi requirejs.

Và nó cần phải sau. Vì vậy, các xét nghiệm của bạn có thể chạy, nhưng quitit grunt không biết về nó bởi vì nó không báo cáo lại.

Tôi đã thực hiện kiểm tra nhanh chóng đặt mã cầu nối ở cuối mô-đun mở rộng qunit của bạn và nó hoạt động tốt.

Có thể bạn có thể tạo mô-đun cầu qunit và gọi điều đó cũng như trong qunit của bạn mở rộng hoặc tương tự.

Mã từ cây cầu chính thức sẽ hoạt động tốt. Chỉ cần chắc chắn rằng nó được lấy sau khi qunit.

Quyền truy cập Grunt sẽ vẫn truyền tập lệnh nhưng không thành công vì QUnit không xác định, nhưng có thể sẽ không gây hại cho các thử nghiệm của bạn.

+4

Vậy bạn có thể làm gì để sửa lỗi này? – funkybro

2

Tôi đang sử dụng grunt-contrib-qunit để chạy kiểm tra QUnit qua grunt. Nó sử dụng phantomjs trong nội bộ.

tôi đã nhận được báo lỗi giống như OP sau khi nâng cấp grunt-contrib-QUnit lên phiên bản mới nhất (0.7.0):

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

Để khắc phục vấn đề này, tôi đã phải QUnit tải đầu tiên qua require() và sau đó thực hiện QUnit.start() và xác định tất cả các mô-đun và kiểm tra QUnit của tôi sau đó.

tập tin HTML trông giống như sau:

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

Sau đó 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); 
    }); 
}); 
Các vấn đề liên quan