我有我的測試計時問題。我正在使用事件聚合器來引發事件,問題是我的規範在代碼到達引發的事件之前完成。我需要在運行完畢的代碼之後運行規範。骨幹Marioniette事件.EventAggregator和測試
例如,我創建一個佈局,然後引發一個事件:
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」事件處理程序中的代碼重構爲我「測試」設置並調用的方法。
我很好奇,如果有人有更好的主意?