テストでタイミングの問題が発生しています。イベントアグリゲーターを使用してイベントを発生させていますが、問題は、発生したイベントにコードが到達する前に仕様が完了していることです。イベントコードが実行された後に実行するスペックが必要です。
たとえば、レイアウトを作成してからイベントを発生させています。
DocumentManager.addInitializer(function(){
DocumentManager.layout = new Layout();
DocumentManager.layout.on("show", function(){
DocumentManager.vent.trigger("layout:rendered");
});
DocumentManager.content.show(DocumentManager.layout)
});
次に、レイアウトが作成された後、別のビューを作成します。
DocumentManager.vent.on("layout:rendered", function(){
Documents.folders = new Documents.Folders();
Documents.folders.reset(window._rootFolder);
Documents.treeRoot = new Documents.TreeRoot({
collection: Documents.folders
});
DocumentManager.layout.treeView.show(Documents.treeRoot);
DocumentManager.vent.trigger("folder:added");
});
問題は、このコードが実行される前にスペックが終了することです。
describe 'battlebox', ->
describe 'versioned documents', ->
describe 'empty root and no files', ->
beforeEach ->
loadFixtures "battlebox.html"
DocumentManager.start()
window._rootFolder = Test.Factory.BattleBox.emptyRoot()
it "should create a root folder", ->
expect(DocumentManager.Documents.folders.length).toEqual 1
私のオプションは、テストからイベントをトリガーするか、「layout:rendered」イベントハンドラーからコードを「セットアップ」してテストから呼び出すメソッドにリファクタリングすることです。
誰かがもっと良いアイデアを持っているかどうか私は興味がありますか?