该项目核心是将代码覆盖率转化为开发动作,覆盖测试生成、报告分析、问题定位、重构验证和CI阻断五环节;通过Jest+nyc搭建基线,运行命令生成lcov.info与HTML报告,重点排查函数覆盖0%、分支覆盖偏低及语句覆盖低的文件。

JS 代码覆盖率综合实战演练项目,核心是把覆盖率从“数字展示”变成“开发动作”,覆盖测试生成、报告分析、问题定位、重构验证和 CI 阻断五个环节,形成闭环。
一、搭建可度量的测试基线
用 Jest + nyc(Istanbul)组合快速落地:
- 在 package.json 中添加带覆盖率的测试脚本:
"test:coverage": "jest --coverage --coverageDirectory=coverage --coverageReporters=lcov,text --collectCoverageFrom=src/**/*.{js,ts,jsx,tsx}" - 运行
npm run test:coverage,确认生成coverage/lcov.info(供 SonarQube 或 CI 解析)和coverage/lcov-report/index.html(本地可视化) - 打开 HTML 报告,重点看三类低分文件:函数覆盖为 0%、分支覆盖显著低于行覆盖、单文件语句覆盖
二、用报告反推代码问题类型
不同覆盖率缺口对应不同代码风险,需分类处理:
- 函数覆盖为 0% → 检查是否已废弃:全局搜索函数名,确认无 import / 调用,直接删除该模块及对应测试桩
-
分支覆盖低但行覆盖高 → 典型“假逻辑”:如
if (env === 'legacy')在当前环境永不成立,删掉整个分支或替换为明确配置项 - 某文件语句覆盖极低(如 12%)但被调用 → 多为大函数混杂职责:用 Chrome Coverage 面板录制真实操作,确认哪些行真未执行,再拆分函数
三、在 CI 中固化质量门槛
让覆盖率成为构建必过关卡,而非事后查看项:
- 在 Jenkins Pipeline 的测试阶段后加入检查:
sh 'nyc check-coverage --lines 80 --functions 75 --branches 70'(数值按项目成熟度调整) - 或接入 SonarQube,在
sonar-scanner命令中指定:-Dsonar.javascript.lcov.reportPaths=coverage/lcov.info -Dsonar.qualitygate.wait=true - HTML Publisher 插件可同步发布报告链接,方便团队随时点开查看红色未覆盖行
四、用覆盖率驱动老旧模块重构
把覆盖率当“手术导航图”,指导安全清理:
- 导出所有函数覆盖为 0% 的文件列表:
nyc report --reporter=json-summary && cat coverage/coverage-summary.json | jq '.total.functions.pct' - 对低覆盖但高复杂度的模块(如含多个嵌套 if / switch),先补边界测试用例,再提取纯函数、移除副作用
- 每次重构后重新跑覆盖率,确保关键路径语句覆盖不降、新增分支被测试捕获
- 配合 ESLint 规则
no-unused-vars和no-unreachable交叉验证,减少误删风险


















