在没有明确的`Ember.run`的情况下测试Ember

时间:2013-09-06 11:58:34

标签: ember.js

如果transitionTo未包含Ember.run,则由于缺少运行循环的自动运行,测试将失败。

export default Ember.Controller.extend({
  actions: {
    actionName: function() {
      var router = this.get('target');

      setTimeout(function() {
        // I want to get rid of this `Ember.run` wrapper, and just use
        // `router.transitionTo('index');`
        Ember.run(function() {
          router.transitionTo('index');
        });
      });
    }
  }
});

有没有办法在测试模式下摆脱Ember.run

谢谢!

**更新**

抱歉,遗漏了最重要的事情:问题仅出现在某些异步任务正在进行且Ember.run在测试模式中被遗漏的情况。使用setTimeout更新了示例。

1 个答案:

答案 0 :(得分:2)

在测试通常设置Ember.testing = true的ember应用时,这将禁用自动runloop,这使您可以通过Ember.run

手动调度异步操作以在一次性runloop中进行调度

Ember.run因此是强制性的,否则你会遇到竞争条件,因为你的代码不会与ember正在做的其他任务同步。

所以我猜你最好使用Ember.run包装器。

希望它有所帮助。