javascript - 在 jasmine 测试中处理 Promise.all 中的拒绝
问题描述
我正在尝试在 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);
});
问题是,我从 Jasmine 收到“未处理的拒绝:抛出 loremipsum”错误 - 即使我相信我正在使用 foo 中的 catch() 处理拒绝?我不应该对 Promise.all 中的每个承诺都需要单独的捕获,不是吗?我手动测试了它,它确实捕捉到了拒绝并表现得恰到好处,所以我不确定在 Jasmine 中测试它的最佳方法。谢谢!
解决方案
看起来测试 promise1 失败的正确方法是:
mocks.promise1.and.throwError('');
Promise.reject() 在被我的实际错误处理代码捕获之前就被 Jasmine 捕获了。
推荐阅读
- python - 看不到输出,只能在终端
- javascript - Vue i18n 包括带有翻译的外部 JSON
- javascript - 如何将 GitHub 页面连接到 Firebase
- python - Matlab在python中的索引和替换
- java - 调用 JNI 函数创建对象
- angular - 当 div 来自 Angular 6 中的循环时,如何在单击链接时交换 2 个 div
- python - 如何在同一个 Chalice 应用程序中从不同的路由返回图像和 json?
- node.js - 在测试环境中的服务器上运行 axio 请求
- git - Git 命令不起作用(git checkout -q rewrite)
- sql - Oracle中的超时和超时考勤SQLQuery