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

如何在Jest中实现嵌套断言,或对拒绝的Promise做多验证?

优化被拒绝Promise的多项验证方案

方案一:捕获错误后逐一断言

先通过expect().rejects.toBeDefined()捕获被拒绝的错误对象,再对其做独立的多项验证,无需额外返回值,逻辑更清晰:

// 捕获被拒绝的Promise错误
const axiosError = await expect(axios.get('<some call that throws a 40x error>')).rejects.toBeDefined();

// 逐项验证错误属性
expect(axiosError.response?.status).toBe(400);
expect(axiosError.response?.data).toHaveProperty('message');
expect(axiosError.response?.data.message).toMatch(/invalid period.*/);

方案二:使用toMatchObject做结构化匹配

利用Jest的toMatchObject匹配器,直接对错误对象的嵌套结构做验证,甚至可以在内部嵌套其他匹配器(比如expect.stringMatching),一次完成多项校验,代码更简洁:

await expect(axios.get('<some call that throws a 40x error>')).rejects.toMatchObject({
  response: {
    status: 400,
    data: {
      message: expect.stringMatching(/invalid period.*/)
    }
  }
});

为什么这两种方法更优

原来用toSatisfy的方式本质是“滥用”该匹配器——toSatisfy原本是用来验证单个布尔条件的,强行在内部塞多个断言不仅违反设计意图,还必须手动返回true,可读性和维护性都很差。上面两种方案要么拆分断言提升清晰度,要么用结构化匹配精简代码,都更符合Jest的最佳实践。

内容的提问来源于stack exchange,提问作者Michael Wiles

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 18:09:58