【发布时间】:2020-12-14 06:22:01
【问题描述】:
我想测试一个方法,它返回Promise.allSettled() 的结果并调用另一个返回承诺的函数。
我将问题简化为以下测试代码:
describe('Promise tests', () => {
it('should reject directly', async () => {
const f = jest.fn().mockRejectedValue(new Error('foo'));
const p = async () => await f();
// works
await expect(p).rejects.toThrow('foo');
});
it('should reject with allSettled', async () => {
const f = jest.fn().mockRejectedValue(new Error('foo'));
const p = async () => await f();
const results = await Promise.allSettled([p]);
expect(results[0].status).toBe('rejected'); // fulfilled - but why?
expect(results[0].reason).toBe('foo');
});
});
为什么第二种情况没有收到拒绝的承诺?
- node.js v14.3.0
- 开玩笑 v25.4.0
【问题讨论】:
-
你的第一个测试用例对我来说失败了:
expect(p)vs.expect(p())。当p返回一个承诺时,Promise.allSettled 应该是这样的:Promise.allSettled([p(), /* many more*/])
标签: javascript node.js ecmascript-6 jestjs es6-promise