我是一个控制器,其动作调用一个方法来执行某些异步操作并返回一个promise。
export default Ember.Controller.extend({
_upload: function() {
// return a promise
},
actions: {
save: function(item) {
this._upload(item).then(function(response) {
// Handle success
}, function(error) {
// Handle error
}
}
}
});
我想对Handle success
和Handle error
下的代码进行单元测试。
在我的单元测试中,我使用
_uploadMethod
controller.set("_upload", function() {
return new Ember.RSVP.Promise(function(resolve) {
resolve({name: "image1"});
});
});
然后我调用该操作并声明成功处理程序已完成作业
controller.send("save", "item");
assert.equal(controller.get("selected.item"), "item");
问题是断言失败是因为它在promise被解决之前运行并且成功处理程序中的所有东西都已完成。
如何在检查断言之前等待承诺解决?
答案 0 :(得分:1)
如果您尝试这样做会怎样:
PUT
有点hacky方式,但它可能会奏效。
答案 1 :(得分:0)
要测试异步方法,可以使用测试助手waitUntil
等待该方法的预期返回,如下面的代码。
controller.send('changeStepAsyncActionExample');
await waitUntil(() => {
return 'what you expect to the Promise resolve';
}, { timeout: 4000, timeoutMessage: 'Your timeout message' });
// If not timeout, the helper below will be executed
assert.ok(true, 'The promise was executed correctly');