关于 coverage
用于检查未暂存代码改动是否被测试覆盖的技能。它运行测试与覆盖率报告,并将 LCOV 数据映射到改动行,列出未覆盖位置。
主要功能
- 01获取未暂存文件及改动行
- 02运行 CI 测试和覆盖率命令
- 03将 LCOV 覆盖率映射到改动
- 04报告未覆盖的代码行
适用场景
- 01提交前核对新改动的测试覆盖
- 02定位改动代码中缺少覆盖的行
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ helderberto/ agent-skills --skill coverage安装后在 Claude Code 中输入/coverage确认已加载。
附带文件scripts/parse-lcov.py
详细介绍
覆盖率检查
上下文
并行运行:
git diff --name-only— 获取未暂存文件git diff -U0 --no-color— 获取更改的行号
命令
按顺序运行:
npm run test:ci— 使用覆盖率运行 vitestnpm run coverage:report— 生成 lcov/文本报告
工作流
- 获取未暂存文件和行范围(并行):
git diff --name-onlygit diff -U0 --no-color
- 运行覆盖率检查:
npm run test:cinpm run coverage:report
- 将 diff 保存到临时文件,然后运行:
git diff -U0 --no-color > /tmp/changes.diff python3 scripts/parse-lcov.py --lcov coverage/lcov.info --diff /tmp/changes.diff - 从标准输出报告未覆盖的行:
file.ts:42 - 从标准错误输出摘要:已覆盖 X/Y 行更改
LCOV 格式
解析 coverage/lcov.info:
SF:src/utils/helper.ts
DA:10,1 # line 10, covered (hit 1 time)
DA:11,0 # line 11, NOT covered
DA:12,5 # line 12, covered (hit 5 times)
end_of_record
关键字段:
SF:— 源文件路径DA:line,hits—0表示未覆盖,>0表示已覆盖end_of_record— 文件区段结束
将 SF: 路径与 git diff 文件匹配。检查每个更改行对应的 DA: 条目。如果 hits 为 0,则报告为未覆盖。
避免找借口
| 借口 | 反驳 |
|---|---|
| “覆盖率不能保证质量” | 没错,但代码未覆盖就意味着完全没有自动化验证。 |
| “这只是配置变更” | 配置变更也会导致生产环境故障。如果其中包含逻辑,就检查覆盖率。 |
| “100% 覆盖率要求太高” | 没人要求达到 100%。检查更改的行是否已覆盖。 |
| “测试套件已经全部通过” | 测试套件全绿,但更改未覆盖 = 虚假的信心。 |
规则
- 仅分析未暂存的更改(
git diff) - 按顺序运行命令:先运行
test:ci,再运行coverage:report - 使用
scripts/parse-lcov.py解析 lcov 数据,并将其映射到更改行 - 报告未覆盖的行:
file.ts:42 - 忽略没有覆盖率数据的文件(非代码文件)
错误处理
npm run test:ci失败 — 报告测试失败并停止- 找不到
coverage/lcov.info— 确认测试运行器配置中的coverage.reporter包含lcov git diff没有返回任何更改 — 报告没有需要检查的未暂存更改
评论
支持 Markdown