Jest测试TypeORM事务时catch/finally块内断言未生效问题
问题原因
- 异步断言未加
await:expect(...).rejects.toThrow()返回的是Promise对象,你没有等待该断言执行完成就运行了后续的调用校验逻辑,此时save函数的异步逻辑还未执行完毕,catch、finally块内的代码都还没触发,所以所有调用计数都是0。覆盖率统计会等待所有异步任务执行完成后再生成,因此会出现覆盖率显示逻辑已执行、但断言未生效的矛盾现象。 - 输出内容不匹配:业务代码中
console.error的模板字符串多写了一个加号,实际输出内容为Error: + Error to write in database,和你断言中期望的内容不符,就算解决了第一个问题,该断言也会报错。
修复方案
- 给异步断言添加
await,等待save函数执行完成后再做调用校验,修改测试代码对应逻辑:
// 原代码 expect(async () => { await save(budget, mockedConnection); }).rejects.toThrow(errorMessage); // 修改后 await expect(async () => { await save(budget, mockedConnection); }).rejects.toThrow(errorMessage);
- 修正业务代码中
console.error的模板字符串,删掉多余的加号:
// 原代码 console.error(`Error: + ${e.message}`); // 修改后 console.error(`Error: ${e.message}`);
修改完成后重新运行测试即可通过所有断言。
内容的提问来源于stack exchange,提问作者alexandrecintra
相关产品推荐
相关产品推荐

