Testing 余烬';s App.reset和model.rollback在测试期间导致错误行为

Testing 余烬';s App.reset和model.rollback在测试期间导致错误行为,testing,ember.js,qunit,Testing,Ember.js,Qunit,在每次测试之前,我都会重置应用程序,如下所示: QUnit.testStart = -> App.reset() 在大多数情况下,这非常有效。但是,在我的一条路线中,我定义了回滚: App.ProjectsNewRoute = Ember.Route.extend model: -> @store.createRecord('project') setupController: (controller, model) -> controller.

在每次测试之前,我都会重置应用程序,如下所示:

QUnit.testStart = ->
  App.reset()
在大多数情况下,这非常有效。但是,在我的一条路线中,我定义了回滚:

App.ProjectsNewRoute = Ember.Route.extend

  model: ->
    @store.createRecord('project')
  setupController: (controller, model) ->
    controller.set('content', model)
  deactivate: ->
    @get('controller.model').rollback()

当出现回滚时,许多看似无关的集成和路由测试失败。如果我注释掉回滚,那么这些其他测试将按预期通过。或者,我可以评论
App.reset()
,一切正常。那为什么这两个人打得不好呢?随着测试套件的增长,我需要能够调用
App.reset()
,而不会破坏任何东西。

App reset重置余烬应用程序,而不是商店。商店里也没有唱片。此外,余烬数据方法通常是异步的,这意味着在切换任务时,您可能会完成,也可能不会完成。因此,可能发生的情况是回滚有一个挂起的回调,并且在应用程序重置后,该回调完成,从而导致错误行为?我猜可能是这样的,一些异步问题泄漏到错误的代码区域。Ember在测试期间跟踪其承诺,但我不确定它是否跟踪外部库承诺(我怀疑这一点,但如果我没记错的话,他们会将测试模式的默认实现炸掉,以便跟踪它。我不得不稍微玩玩一下。下一步可能是在jsbin中隔离一个可复制的实现。这一讨论让我想到了
助手方法,它实际上起到了作用。