Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Backbone.js 主干Marioniette事件。事件聚合器和测试_Backbone.js_Marionette - Fatal编程技术网

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()