mcpField
C
coverage

coverage

github.com/helderberto测试与质量1941 次安装3 天前更新
代码仓库

关于 coverage

用于检查未暂存代码改动是否被测试覆盖的技能。它运行测试与覆盖率报告,并将 LCOV 数据映射到改动行,列出未覆盖位置。

主要功能

  1. 01获取未暂存文件及改动行
  2. 02运行 CI 测试和覆盖率命令
  3. 03将 LCOV 覆盖率映射到改动
  4. 04报告未覆盖的代码行

适用场景

  1. 01提交前核对新改动的测试覆盖
  2. 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 — 获取更改的行号

命令

按顺序运行:

  1. npm run test:ci — 使用覆盖率运行 vitest
  2. npm run coverage:report — 生成 lcov/文本报告

工作流

  1. 获取未暂存文件和行范围(并行):
    • git diff --name-only
    • git diff -U0 --no-color
  2. 运行覆盖率检查:
    • npm run test:ci
    • npm run coverage:report
  3. 将 diff 保存到临时文件,然后运行:
    git diff -U0 --no-color > /tmp/changes.diff
    python3 scripts/parse-lcov.py --lcov coverage/lcov.info --diff /tmp/changes.diff
    
  4. 从标准输出报告未覆盖的行:file.ts:42
  5. 从标准错误输出摘要:已覆盖 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