我正在使用Backbone和Backbone.Marionette编写单页JavaScript应用程序.我使用AMD模块和RequireJS来帮助组织我的代码和管理依赖项.我也使用Mocha作为我的TDD/BDD测试框架.
一切都工作正常,直到我想使用Sinon.JS引入存根,模拟和间谍.经过大量的搜索,我在RequireJS wiki和Squire.js中看到了一个关于测试框架的页面,看起来它很适合我的需求.但是,当我尝试使用Squire.js加载模块时,Mocha突然报告模块依赖关系的全局泄漏.如果我使用Require.JS直接加载模块,则不会报告泄漏.
例如,以下测试代码不会导致Mocha报告任何泄漏:
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"
};
});
Run Code Online (Sandbox Code Playgroud)
但是,将代码转换为使用Squire.js如下导致Mocha报告jQuery,Backbone和Marionette的泄漏(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 …Run Code Online (Sandbox Code Playgroud)