Jest中如何断言异步函数抛出错误?
在Jest中断言异步函数抛出错误的规范方式
你当前写的代码是有效的,测试确实会通过,但Jest提供了更贴合异步场景的规范断言方式,分两种情况:
1. 直接测试异步函数本身
如果你的目标就是验证某个异步函数会抛出错误,用rejects匹配器更简洁,不需要额外包裹匿名函数:
const asyncFunc = async () => { return Promise.reject(new Error('Foo')); }; // 断言Promise会reject,且抛出指定错误 await expect(asyncFunc()).rejects.toThrow('Foo');
2. 测试包含异步函数的代码块
如果需要在调用异步函数前执行一些前置逻辑(比如初始化数据、调用其他方法),你原来用匿名async函数包裹的方式也是规范写法,还可以加上具体错误信息让断言更精准:
await expect(async () => { // 这里可以添加前置操作,比如: // await someSetupFunction(); await asyncFunc(); }).toThrow('Foo');
简单总结:
- 直接测异步函数选
rejects.toThrow,代码更简洁 - 测包含异步函数的代码逻辑选匿名async函数包裹+
toThrow,灵活性更高
内容的提问来源于stack exchange,提问作者therealcobb
相关产品推荐
相关产品推荐

