微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在茉莉花测试中处理Promise.all中的拒绝

如何解决在茉莉花测试中处理Promise.all中的拒绝

我正在尝试在茉莉花中测试包含Promise.all的函数(TypeScript,但我想我在JS中也会遇到同样的问题)-我想确保我正在适当地处理拒绝:

function foo(): Promise<void> {
    return Promise.all(promise1,promise2)
        .catch(() => undefined)
        .then(() => undefined);
}

function bar() {
    foo().finally(makeBarHappen);
}

然后我的测试是这样的,我在foo中嘲笑其中一个承诺失败:

it('test bar happens even when foo fails',async () => {
     mocks.promise1.and.returnValue(Promise.reject('loremipsum'));

     pressButtonThatTriggersBar();

     await timeout(longEnoughTimeoutForBarToHappen);

     expect(barHappened);
});

问题是,我从茉莉花中收到“未处理的拒绝:抛出了loremipsum”错误-尽管我相信我 am 使用foo内部的catch()处理拒绝?在Promise中的每个承诺,我都不需要个人抓住。全部,对吗?我手动测试了它,它确实捕获了拒绝并表现正常,因此我不确定在Jasmine中测试此方法的最佳方法。谢谢!

解决方法

看起来,测试promise1失败的正确方法是:

mocks.promise1.and.throwError('');

Promise.reject()在没有时间被我的实际错误处理代码捕获之前就被Jasmine捕获了。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。