Ember 2.16组件集成测试的返回承诺模拟了操作

问题描述 投票:0回答:2

我正在为我的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条件内部,因此我希望我的测试逐步通过这些条件以增加代码覆盖率。

我如何从集成测试中的模拟动作中返回承诺?

javascript ember.js promise
2个回答
1
投票

您可以像在集成测试中那样,将呼叫存入sendAction

test('', function(assert) {
  this.sendAction = () => RSVP.resolve(true);

  this.render(hbs`{{some-component sendAction=sendAction}}`);
});

这将返回您的代码期望的承诺。

我建议在需要使用Promise的情况下使用RSVP库。


0
投票

事实证明我是错误地归还了诺言。

return new Promise((reject) => {
  reject(true);
});

能够将承诺退还为“已拒绝”。

© www.soinside.com 2019 - 2024. All rights reserved.