Backbone と Backbone.Marionette を使用して単一ページの JavaScript アプリケーションを作成しています。AMD モジュールと RequireJS を使用して、コードを整理し、依存関係を管理しています。また、TDD/BDD のテスト フレームワークとしてMochaを使用しています。
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"
};
});
ただし、コードを次のように 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 a \'main\' region', function() {
expect(testContext.app.mainRegion).to.exist;
});
});
return {
name: "App"
};
});
私は何を間違っていますか?Mocha が RequireJS ではリークを報告せず、Squire.js では報告していることに、私は完全に困惑しています。Squire.js の前にカスタム関数や testr.js など、RequireJS の依存関係のモックに関する別の StackOverflow の質問で見つけた他のソリューションもいくつか試してみましたが、同様の結果が得られました。今日まで、Mocha、RequireJS、および Sinon.JS をすべて一緒に使用する例を見つけることができませんでした。
省略した重要な情報などがある場合に備えて、現在のコード ベースを GitHub に配置しました。問題のテストはtest\spec\test.app.jsにあります。
どんな支援も大歓迎です。私は、テスト セットアップでモンキーを乗り越えて、実際に自分のアプリの作業に取り掛かりたいと思っています。前もって感謝します。