我的测试有时间问题。我正在使用事件聚合器来引发事件,问题是我的规范在代码到达引发的事件之前完成。我需要在事件代码运行后运行规范。
例如,我正在创建一个布局,然后引发一个事件:
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”事件处理程序中重构为我“设置”并从我的测试中调用的方法。
我很好奇是否有人有更好的主意?