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中隔离一个可复制的实现。这一讨论让我想到了和助手方法,它实际上起到了作用。