我正试图在jasmine中测试一个包含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抛出"Jasmine的错误-尽管我相信我正在处理foo内部的catch((拒绝?我不应该为promise.all中的每一个承诺都单独捕获,是吗?我手动测试了它,它确实收到了拒绝并表现得很好,所以我不确定在Jasmine中测试它的最佳方式。谢谢
看来测试promise1失败的正确方法是:
mocks.promise1.and.throwError('');
在Jasmine还没来得及被我实际的错误处理代码捕获之前,Promise.rejectt((就被它捕获了。