根据Ember.run的文档:
在RunLoop中运行传递的目标和方法,确保任何 刷新的延迟操作包括绑定和视图更新 结束。
所以我预计当我在测试中使用它时,如果测试中的代码是为了稍后使用Ember.run.later安排一些工作,它应该在Ember.run调用完成之前完成,但是看起来不是如此:
long long
结果是:
test('Ember.run waits for all scheduled actions to finish', function(assert) {
assert.expect(2);
var done = assert.async();
let isRunLaterThingFinished = false;
Ember.run(function() {
Ember.run.later(function() {
isRunLaterThingFinished = true;
assert.ok(true, 'the scheduled thing happened');
done();
}, 1);
});
assert.ok(isRunLaterThingFinished, "scheduled actions should have happened by the time ember run finishes");
});
任何人都可以解释我在这里缺少的内容,以及如何让我的测试等待所有预定的方法在完成断言之前完成?
答案 0 :(得分:2)
Ember.run.later
将创建一个单独的运行循环。
您需要使用的是Ember.run.schedule
。
Ember.run(function() {
Ember.run.schedule('actions', this, function() {
// The code goes here
});
});
这样,你的函数进入当前运行循环的actions
队列,并在刷新队列时在循环结束之前执行。