2
我在测试一个余烬组件时碰到了一堵墙。用承诺测试余烬组件
我有了一个动作
伪
actions: {
doSomething(){
this.set('showSpinner', true);
this.model.serverOperation().then(()=>{
this.set('showSpinner', false);
this.service.doSomething();
})
}
}
在我的测试组件,我想断言showSpinner
是真正被调用的动作时,就变成假的承诺结算后。所以,我的测试看起来像(伪代码,使用烬-兴农-qunit):
const deferred = Ember.RSVP.defer();
const modelMock = this.mock(this.model);
const serviceMock = this.mock(this.service);
modelMock.expects('serverOperation').returns(deferred.promise);
serviceMock.expects('doSomething);
this.$('selector').click(); // invokes 'doSomething'
assert(this.showSpinner, true)
deferred.resolve();
assert(this.showSpinner, true)
的问题是,在deferred.resolve()
电话,在组件的then
方法前的最后断言火灾。
是否有一种规范的方式来处理这种类型的事情在烬?
我尝试使用异步测试,但在这种情况下,一些有趣的事情发生了:
- 我改变最后的断言在
setTimeout
来执行,然后在showSpinner
通行证断言,但 - 测试仍然在
then
运行之前退出(所以在超时回调触发之前),并且由于我们使用的是ember-sinon-qunit,所以测试工具在预期上失败。
没有帮助兴农失败。 – hvgotcodes