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

Jest覆盖率显示条件判断未覆盖但代码实际运行,如何解决?

问题原因

第17行if (!obj[key])属于分支判断语句,Jest的覆盖率统计要求条件判断的真假两个执行分支都被测试到才会标记该行完全覆盖。你当前仅测试了obj[key]不存在的场景:此时判断结果为true,执行第18行的空对象赋值逻辑,缺少obj[key]已经存在的场景:此时判断结果为false,直接跳过第18行执行第21行的合并逻辑,因此覆盖率报告始终标记第17行未覆盖。

修复方法

补充覆盖obj[key]已存在场景的测试用例即可,你也可以同步补充其他未覆盖分支的用例提升整体覆盖率,参考测试代码如下:

// 原有测试用例:覆盖key不存在的分支
test('replace creates new key and merges data when key not exists', () => {
  let obj = { a: 1 };
  expect(obj.b).not.toBeDefined();
  replace(obj, 'b', {foo:"bar"});
  expect(obj.b.foo).toBe("bar");
});

// 新增测试用例:覆盖key已存在的分支,解决17行未覆盖问题
test('replace merges data directly when key already exists', () => {
  let obj = { a: 1, b: { origin: 'test' } };
  replace(obj, 'b', {foo:"bar"});
  expect(obj.b.origin).toBe('test');
  expect(obj.b.foo).toBe('bar');
});

// 可选补充:覆盖data为空时的提前返回分支
test('replace does nothing when input data is falsy', () => {
  let obj = { a: 1 };
  replace(obj, 'b', undefined);
  expect(obj.b).not.toBeDefined();
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 12:45:08