Backbone.js 主干Marioniette事件。事件聚合器和测试
我的考试有时间问题。我使用事件聚合器来引发事件,问题是我的规范在代码到达引发的事件之前就完成了。我需要在事件代码运行后运行规范 例如,我正在创建布局,然后引发事件:Backbone.js 主干Marioniette事件。事件聚合器和测试,backbone.js,marionette,Backbone.js,Marionette,我的考试有时间问题。我使用事件聚合器来引发事件,问题是我的规范在代码到达引发的事件之前就完成了。我需要在事件代码运行后运行规范 例如,我正在创建布局,然后引发事件: DocumentManager.addInitializer(function(){ DocumentManager.layout = new Layout(); DocumentManager.layout.on("show", function(){ DocumentManager.vent.t
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”事件处理程序中的代码重构为一个方法,我将“setup”并从测试中调用该方法
我很好奇是否有人有更好的想法?如果
在每个之前的完成之前运行,那么您的设置中有一些代码是异步运行的。您必须使用Jasmine的异步功能来实现这一点
此外,您可能希望将测试分成更小的部分。由于有一个事件被触发以便于呈现文件夹,因此在此处拆分测试。进行一次测试,以证明初始值设定项正确设置了布局。然后进行另一个测试,以显示文件夹是否正确呈现。您可以通过直接触发测试中的“layout:rendered”事件来进行第二个测试。如果在每个
完成之前的之前运行了,则设置中有一些代码是异步运行的。您必须使用Jasmine的异步功能来实现这一点
此外,您可能希望将测试分成更小的部分。由于有一个事件被触发以便于呈现文件夹,因此在此处拆分测试。进行一次测试,以证明初始值设定项正确设置了布局。然后进行另一个测试,以显示文件夹是否正确呈现。您可以通过直接触发测试中的“layout:rendered”事件来进行第二个测试。我使用两种类型的异步检查:
- 支票延期兑现承诺-
- 事件的eventTriggeredOn-
您的规范的一个示例:
describe 'battlebox', ->
describe 'versioned documents', ->
describe 'empty root and no files', ->
beforeEach ->
loadFixtures "battlebox.html"
it "should create a root folder", ->
# Expect event 'layout:rendered' to be triggered
TestHelpers.eventTriggeredOn DocumentManager.vent, 'layout:rendered', =>
expect(DocumentManager.Documents.folders.length).toEqual 1
# Async bit
DocumentManager.start()
window._rootFolder = Test.Factory.BattleBox.emptyRoot()
我使用两种类型的异步检查:
- 支票延期兑现承诺-
- 事件的eventTriggeredOn-
您的规范的一个示例:
describe 'battlebox', ->
describe 'versioned documents', ->
describe 'empty root and no files', ->
beforeEach ->
loadFixtures "battlebox.html"
it "should create a root folder", ->
# Expect event 'layout:rendered' to be triggered
TestHelpers.eventTriggeredOn DocumentManager.vent, 'layout:rendered', =>
expect(DocumentManager.Documents.folders.length).toEqual 1
# Async bit
DocumentManager.start()
window._rootFolder = Test.Factory.BattleBox.emptyRoot()