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

如何修复Jest覆盖率未达100%问题?代码测试场景解析

实现Jest 100%分支覆盖率的解决方案

1. 定位未覆盖分支的逻辑

打开scales.js找到第18行,先明确该行的代码结构:

  • 如果是三元表达式(如condition ? val1 : val2):说明你只测试了condition为true或condition为false其中一种场景
  • 如果是逻辑与/或(如a && b或a || b):说明你没覆盖到a为false(针对&&)或a为true(针对||)的分支
  • 如果是if/else语句:说明你只编写了进入if块或者else块的测试用例

2. 补全缺失的测试场景

以下是几种常见场景的修复示例:

场景1:三元表达式分支未覆盖

假设第18行代码:

// scales.js 第18行
return scale.isValid ? scale.calculate() : null;

若现有测试仅覆盖了scale.isValid = true的情况,需补充测试scale.isValid = false的场景:

// 测试文件
test('scale无效时返回null', () => {
  const invalidScale = { isValid: false };
  expect(getScale(invalidScale)).toBeNull();
});

场景2:逻辑与的分支未覆盖

假设第18行代码:

// scales.js 第18行
const result = scale.options && scale.options.defaultValue;

此时scale.options为undefined或null的分支未被覆盖,补充测试用例:

// 测试文件
test('scale无options属性时result为undefined', () => {
  const scaleWithoutOptions = {};
  getScale(scaleWithoutOptions); // 触发该行代码执行
  // 可根据函数实际逻辑添加对应断言
});

场景3:if/else分支未覆盖

假设第18行是else块的代码:

// scales.js
function getScale(scale) {
  if (scale.type === 'metric') {
    return scale.metricValue;
  } else {
    // 第18行
    return scale.imperialValue;
  }
}

若现有测试仅覆盖了type为metric的情况,补充测试type不为metric的场景:

// 测试文件
test('scale为英制类型时返回英制数值', () => {
  const imperialScale = { type: 'imperial', imperialValue: 100 };
  expect(getScale(imperialScale)).toBe(100);
});

3. 验证覆盖率

补全测试后,重新执行命令确认覆盖率:

jest --coverage

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 09:37:08