【发布时间】:2020-03-11 10:15:26
【问题描述】:
得到以下失败的测试用例,我不知道为什么:
foo.js
async function throws() {
throw 'error';
}
async function foo() {
try {
await throws();
} catch(e) {
console.error(e);
throw e;
}
}
test.js
const foo = require('./foo');
describe('foo', () => {
it('should log and rethrow', async () => {
await expect(foo()).rejects.toThrow();
});
});
我希望 foo 抛出,但由于某种原因它只是解决了并且测试失败了:
FAILED foo › should log and rethrow - Received function did not throw
可能缺少异步等待抛出行为的一些基本细节。
【问题讨论】:
-
不要等待它......只是
expect(foo()).rejects.toThrow();= 因为 foo 所做的只是返回一个拒绝的承诺...... -
@Bravo 这只是隐藏了问题,因为测试不等待结果。
-
是的,我明白了......但你不希望(await foo()) 代替吗?我头晕了:p
-
@Bravo 是的,这很令人困惑,但这是测试抛出异步函数的方法:) https://stackoverflow.com/a/47887098/4341456
标签: javascript reactjs unit-testing jestjs