You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 07:52:45