如何使用Sinon测试Ember.run.later?

Jam*_*sen 5 sinon ember.js

我有一些设置超时的Ember代码:

var MyObject = Ember.Object.extend({
  setFooToBarLater: function() {
    Ember.run.later(this, 'set', 'foo', 'bar', 500);
  }
});
Run Code Online (Sandbox Code Playgroud)

我想用Sinon的假时钟测试一下.这是我试过的:

var clock = sinon.useFakeTimers();
var myObject = MyObject.create();
myObject.setFooToBarLater();
clock.tick(600);
expect(myObject.get('foo')).to.be('bar');
Run Code Online (Sandbox Code Playgroud)

expect总是在之前运行set.我也尝试clock.tick在运行循环中包装:

Ember.run(clock, 'tick', 600);
Run Code Online (Sandbox Code Playgroud)

Jam*_*sen 3

答案似乎不是将 放入clock.tick运行循环中,而是实际调用 的调用Ember.run.later。因此,以下内容确实有效:

var clock = sinon.useFakeTimers();
var myObject = MyObject.create();
Ember.run(myObject, 'setFooToBarLater');
clock.tick(600);
expect(myObject.get('foo')).to.be('bar');
Run Code Online (Sandbox Code Playgroud)