2012-02-20 28 views
9

Tôi bao gồm Mocha.js với use shim xuất sắc cho trang web dựa trên Require.js.Truy cập các chức năng mocha.js "toàn cầu" khi sử dụng require.js

Làm cách nào để truy cập hàm define() và() BDD do Mocha khai báo khi sử dụng Require.js?

Đây là một ví dụ mã cơ bản:

test.js:

var mocha = require('use!mocha') 
    , testFile = require('testFile.js') 

mocha.setup('bdd'); 
mocha.run(); 

testFile.js:

define(function(require) { 
    // describe() and it() are not available 
    describe('Book', function() { 
    it('should have pages', function() { 

    }); 
    }); 
}); 

tôi nhận được lỗi Uncaught ReferenceError: describe is not defined khi chạy trong trình duyệt.

Tôi đã thử window.describe và thử di chuyển yêu cầu ('testFile.js') sang sau mocha.setup ('bdd'). Tôi biết tôi đang thiếu cái gì đó. Có lẽ đã chuyển ngữ cảnh sang mocha bằng cách nào đó.

Trả lời

6

Tôi đã tìm thấy giải pháp trong dự án amd-testing examples của geddski.

Thay vì bao gồm cả các tập tin thử nghiệm (s) ở phía trên cùng với mocha như vậy:

define(['use!mocha', 'testFile'], 
function(Mocha, TestFile) { 
    mocha.setup('bdd'); 
    mocha.run(); 
}); 

Các tập tin thử nghiệm (s) nên được bao gồm như là một yêu cầu cuộc gọi và mocha.run() nhúng vào trong gọi lại:

define(['use!mocha'], 
function(Mocha) { 
    mocha.setup('bdd'); 

    // Include the test files here and call mocha.run() after. 
    require(['testFile'], 
    function(TestFile) { 
    mocha.run(); 
    }); 
}); 
+0

Ngoài ra, bạn sẽ muốn chuyển hết tham số đã thực hiện vào nó() và gọi xong() trong các trường hợp thử nghiệm của bạn. Nếu không, thử nghiệm của bạn có thể gây ra lỗi nhưng mocha sẽ yêu cầu nó vượt qua. – baalexander

+0

Yuck! Đây có phải là giải pháp tốt nhất không? –

+0

Ethan - Tôi hy vọng có một giải pháp tốt hơn. Vui lòng đăng câu trả lời khác nếu bạn tìm thấy câu trả lời! – baalexander

13

vấn đề là các chức năng toàn cầu như describeit được thiết lập bởi mocha.setup(). Bạn có thể sử dụng thuộc tính init của cấu hình shim để gọi mocha.setup() trước khi xuất mocha.

requirejs.config({ 
    shim: { 
    'mocha': { 
     init: function() { 
     this.mocha.setup('bdd'); 
     return this.mocha; 
     } 
    } 
    } 
}); 

require(['mocha', 'test/some_test'], function (mocha) { 
    mocha.run(); 
}); 

Tệp thử nghiệm cần phải yêu cầu mocha.

define(['mocha'], function (mocha) {  
    describe('Something', function() { 
    // ... 
    }); 
}); 

Thuộc tính Shim init thuộc tính được giới thiệu trong RequireJS 2.1. Bạn có thể sử dụng tài sản exports thay vì init với RequireJS 2.0.

+1

Alas cho người dùng Node: 'Lỗi: Cấu hình Shim không được hỗ trợ trong Node' – mikemaccana

+0

điều này làm việc cho tôi (requirejs + configfile + testem + mocha) – oak

+0

Làm việc cho tôi. Cảm ơn nhiều. –

Các vấn đề liên quan