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

Jest测试TypeORM事务时catch/finally块内断言未生效问题

问题原因

  • 异步断言未加await:expect(...).rejects.toThrow()返回的是Promise对象,你没有等待该断言执行完成就运行了后续的调用校验逻辑,此时save函数的异步逻辑还未执行完毕,catch、finally块内的代码都还没触发,所以所有调用计数都是0。覆盖率统计会等待所有异步任务执行完成后再生成,因此会出现覆盖率显示逻辑已执行、但断言未生效的矛盾现象。
  • 输出内容不匹配:业务代码中console.error的模板字符串多写了一个加号,实际输出内容为Error: + Error to write in database,和你断言中期望的内容不符,就算解决了第一个问题,该断言也会报错。

修复方案

  1. 给异步断言添加await,等待save函数执行完成后再做调用校验,修改测试代码对应逻辑:
// 原代码
expect(async () => {
  await save(budget, mockedConnection);
}).rejects.toThrow(errorMessage);

// 修改后
await expect(async () => {
  await save(budget, mockedConnection);
}).rejects.toThrow(errorMessage);
  1. 修正业务代码中console.error的模板字符串,删掉多余的加号:
// 原代码
console.error(`Error: + ${e.message}`);
// 修改后
console.error(`Error: ${e.message}`);

修改完成后重新运行测试即可通过所有断言。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 14:54:03