1

如果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

4

1 回答 1

2

在测试 ember 应用程序时,您通常设置Ember.testing = true这将禁用自动运行循环,这使您可以控制手动安排异步操作在一次性运行循环中发生Ember.run

Ember.run因此是强制性的,否则您会遇到竞争条件,因为您的代码不会与 ember 在后台执行的其他任务同步运行。

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

希望能帮助到你。

于 2013-09-06T12:03:19.857 回答