Tôi đang viết một ứng dụng JavaScript đơn bằng cách sử dụng Backbone và Backbone.Marionette. Tôi đang sử dụng các mô-đun AMD và RequireJS để giúp tổ chức mã của tôi và quản lý các phụ thuộc. Tôi cũng đang sử dụng Mocha làm khung kiểm tra cho TDD/BDD.Làm cách nào để tránh giới thiệu các rò rỉ toàn cầu khi sử dụng Squire.js với RequireJS và Mocha?
Mọi thứ đều hoạt động tốt cho đến khi tôi muốn giới thiệu sơ khai, kết nối và gián điệp bằng Sinon.JS. Sau nhiều lần tìm kiếm, tôi đã xem một trang trên test frameworks in the RequireJS wiki và Squire.js, dường như nó sẽ phù hợp với nhu cầu của tôi. Tuy nhiên, khi tôi cố gắng sử dụng Squire.js để tải một mô-đun, Mocha đột nhiên báo cáo rò rỉ toàn cầu cho các phụ thuộc của mô-đun. Không có rò rỉ được báo cáo nếu tôi tải mô-đun trực tiếp bằng cách sử dụng Require.JS.
Ví dụ, mã kiểm tra sau không gây Mocha báo cáo bất kỳ rò rỉ:
define(['app/app'], function(app) {
describe('App', function() {
it('Should define a \'header\' region', function() {
expect(app.headerRegion).to.exist;
});
it('Should define a \'main\' region', function() {
expect(app.mainRegion).to.exist;
});
});
return {
name: "App"
};
});
Tuy nhiên, việc chuyển đổi mã để sử dụng Squire.js như sau gây Mocha báo cáo rò rỉ cho jQuery, Backbone, và Marionette (phụ thuộc của app.js):
define(['Squire'], function(Squire) {
describe('App', function() {
var testContext = {};
beforeEach(function(done) {
testContext.injector = new Squire();
testContext.injector.require(['app/app'], function(app) {
testContext.app = app;
done();
});
});
it('Should define a \'header\' region', function() {
expect(testContext.app.headerRegion).to.exist;
});
it('Should define a \'main\' region', function() {
expect(testContext.app.mainRegion).to.exist;
});
});
return {
name: "App"
};
});
Tôi đang làm gì sai? Tôi hoàn toàn bối rối rằng Mocha không báo cáo một sự rò rỉ với RequireJS nhưng làm với Squire.js. Tôi cũng đã thử một số giải pháp khác mà tôi đã tìm thấy trong một số khác StackOverflow question on mocking RequireJS dependencies, chẳng hạn như hàm tùy chỉnh và testr.js, trước Squire.js và có kết quả tương tự. Cho đến nay, tôi đã không thể tìm thấy một ví dụ sử dụng Mocha, RequireJS và Sinon.JS cùng nhau.
Tôi đã placed my current code base on GitHub trong trường hợp có một số thông tin quan trọng mà tôi đã bỏ sót hoặc một cái gì đó. Bạn có thể tìm thấy bài kiểm tra được đề cập trong số test\spec\test.app.js.
Bất kỳ hỗ trợ nào được đánh giá cao. Tôi rất muốn có được quá khứ khỉ với thiết lập thử nghiệm của tôi và trên để thực sự làm việc trên ứng dụng của tôi. Cảm ơn trước.