关于 improving-frontend-coverage
供 Agent 使用的前端单元测试覆盖率提升技能,通过分析覆盖数据、编写有价值的测试并迭代验证来提高覆盖率。
主要功能
- 01按覆盖数据确定文件优先级
- 02围绕行为选择测试
- 03迭代验证覆盖率
- 04简化与审查工作流
适用场景
- 01为覆盖不足的前端组件补充测试
- 02测试界面交互和错误状态
- 03运行项目检查前提升覆盖率
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ streamlit/ streamlit --skill improving-frontend-coverage安装后在 Claude Code 中输入/improving-frontend-coverage确认已加载。
详细介绍
提升前端覆盖率
通过有意义且能带来实际价值的测试,将前端单元测试覆盖率提升约 0.2%。
完全自主执行 — 不要停下来或暂停以征求确认。持续迭代(分析 → 实现 → 验证),直到达成 0.2% 的覆盖率目标。如果对测试内容存在歧义,请做出合理选择并继续推进。
工作流
第 1 步:运行带覆盖率的测试
COVERAGE_JSON=1 make frontend-tests # ~5 min
报告生成于 frontend/coverage/:
coverage-summary.json- 每个文件的百分比(行、分支、函数)coverage-final.json- 行级数据,包含未覆盖的行号(s、f、b映射中的命中次数为 0)
第 2 步:分析并排定优先级
读取 coverage-summary.json 以查找符合以下条件的文件:
- 体积大 + 覆盖率低于平均水平(影响大)
lib/src/components/中的核心组件utils/src/中的工具函数
跳过:覆盖率 >97%、自动生成、.d.ts、测试文件。
第 3 步:实现测试(在子 Agent 中)
启动一个子 Agent 为每个优先文件实现测试。向该子 Agent 提供:
- 目标文件路径及其在
coverage-final.json中的未覆盖行 - 阅读源码、现有测试并编写新测试的指令
- 下方的测试选择准则
该子 Agent 应:
- 阅读源码和现有测试以理解缺口
- 为以下内容编写测试:条件渲染、事件处理器、错误状态、边缘情况、无障碍性
- 遵循 RTL 最佳实践:按 role/label 查询,测试行为而非实现
- 运行新测试以验证其通过:
cd frontend && yarn test path/to/Component.test.tsx
第 4 步:验证并迭代
cd frontend && yarn test path/to/Component.test.tsx # Run new tests
COVERAGE_JSON=1 make frontend-tests # Measure progress
重复第 2-4 步,直到覆盖率提升 ≥0.2%,然后运行 make check。
第 5 步:简化、审查并处理反馈
一旦所有测试通过且覆盖率目标达成:
- 运行
simplifying-local-changes子 Agent 以清理并简化代码改动。等待完成。 - 运行
reviewing-local-changes子 Agent 以审查改动。等待完成并阅读审查输出。 - 处理审查反馈:对于每条建议,如果有效且能提升代码质量则实现它;如果不适用或会导致过度设计,则跳过并简要说明理由。
- 运行 /checking-changes 以验证改动后一切仍然通过。
测试选择
要测试: 条件渲染、用户交互、prop 变化、错误处理、无障碍性、边缘情况(null、空值、最大值)。
不要测试: 透传 prop、样式、库内部实现、实现细节、已被充分覆盖的代码。
覆盖率排除: 谨慎使用 /* istanbul ignore next */ 来处理确实不需要测试的代码。始终包含理由(例如 /* istanbul ignore next -- defensive */):
- 无法在 jsdom 中运行的浏览器特定分支(
/* istanbul ignore next -- browser-only */) - 永远不应执行的防御性回退(
/* istanbul ignore next -- defensive */) - 框架要求的样板代码(
/* istanbul ignore next -- exhaustive */)
说明
- 质量 > 覆盖率数字 - 跳过无法捕获真实 bug 的测试
- 测试文件:以
<Component>.test.tsx形式与组件放在一起 - 实现测试后使用
/checking-changes
评论
支持 Markdown