【发布时间】:2014-03-28 08:18:18
【问题描述】:
我正在使用Ember.js Asynchronous Routing 指南中描述的功能。也就是说,我从我的异步路由的model 挂钩返回了一个承诺,以延迟过渡到该路由,这按预期工作。
但是,它破坏了对我的应用进行单元测试的能力。当我运行测试时,控制台中出现以下错误:
断言失败:您打开了测试模式,该模式禁用了 运行循环的自动运行。您将需要使用异步包装任何代码 Ember.run 中的副作用
我已将所有带有异步副作用的代码封装在 Ember.run 中,但我仍然收到错误消息。
这是一个带有最小示例的 JSFiddle:http://jsfiddle.net/nRHfv/3/
该示例基于 Ember Starter Kit 及其随附的测试运行器。它有一个有效的异步索引路由。如果您在 _config 对象(第 10 行)中将 testing: false 设置为 true,它将打开测试套件,您应该会在控制台中看到上述错误。
我的异步路由的model 钩子在第38 行。我尝试了几种将代码包装在Ember.run 中的变体。例如,我尝试在Ember.run 之外定义承诺,在内部执行所有异步操作,然后在外部返回承诺。我还尝试将then() 的内容包装在Ember.run 中,就像我在其他一些答案中看到的那样(例如ember integration test error. dealing with asynchronous side-effects)。
我做错了什么?
【问题讨论】:
-
对于看到此错误的人可能想查看有关 ember 运行循环的视频:youtube.com/watch?v=RLgPBM72LQw
标签: javascript unit-testing ember.js