Jest中两种异步函数抛出测试方式的差异是什么?
Jest中两种异步函数异常测试写法的区别
选项1的核心逻辑:
直接将asyncFun()执行后返回的Promise对象传入expect,通过.rejects断言该Promise会被拒绝,同时用toThrowError验证拒绝的错误是否符合预期。这种写法非常简洁,适合直接测试单个异步函数的异常场景。代码示例:
await expect(asyncFun()).rejects.toThrowError(errorObj)选项2的核心逻辑:
把asyncFun()的调用包裹在一个异步箭头函数中传给expect,Jest会执行这个箭头函数。当内部await asyncFun()触发Promise拒绝时,整个箭头函数返回的Promise也会被拒绝,后续同样通过.rejects和toThrowError完成断言。这种写法的优势是扩展性更强——如果你的测试逻辑需要先执行其他操作(比如初始化数据、调用其他函数),再执行目标异步函数,就可以把所有逻辑都放在这个箭头函数里。代码示例:
await expect(async () => { await asyncFun() }).rejects.toThrowError(errorObj)两者的功能差异:
在仅测试单个异步函数抛出异常的场景下,两种写法的测试效果完全一致,Jest都能正确捕获异常并完成验证。区别只在于写法的灵活性:选项1更简洁,选项2更适合复杂测试流程。
内容的提问来源于stack exchange,提问作者uzluisf
相关产品推荐
相关产品推荐

