我正在为我的Ember 2.16应用程序创建测试,并遇到一个问题,其中代码依赖于从外部操作返回的承诺。
const promise = this.sendAction('action')
promise.then(() => {
//do stuff
});
我的大多数代码都基于这些.then和.catch条件,基于条件,所以我希望能够返回一个成功和失败的条件。我听说过锡诺号,但不幸的是它仅适用于Ember 3.4及更高版本。
test('', function(assert){
this.set('action', () => {
// do assertions
return new Promise(() => {return true} );
});
});
在我的集成测试中,我能够模拟出该动作,但是遇到了未定义的“承诺”。我试图返回Text或其他值,但是在将调试器放入组件时,承诺始终是未定义的。
我可以通过添加一个条件检查来查看是否存在承诺来解决此问题,但是由于我的大部分代码都在这些.then
和.catch
条件内部,因此我希望我的测试逐步通过这些条件以增加代码覆盖率。
我如何从集成测试中的模拟动作中返回承诺?
您可以像在集成测试中那样,将呼叫存入sendAction
:
test('', function(assert) {
this.sendAction = () => RSVP.resolve(true);
this.render(hbs`{{some-component sendAction=sendAction}}`);
});
这将返回您的代码期望的承诺。
我建议在需要使用Promise的情况下使用RSVP库。
事实证明我是错误地归还了诺言。
return new Promise((reject) => {
reject(true);
});
能够将承诺退还为“已拒绝”。