mcpField
I
improving-frontend-coverage

improving-frontend-coverage

github.com/streamlit测试与质量46.2k46 次安装今天更新
代码仓库

关于 improving-frontend-coverage

供 Agent 使用的前端单元测试覆盖率提升技能,通过分析覆盖数据、编写有价值的测试并迭代验证来提高覆盖率。

主要功能

  1. 01按覆盖数据确定文件优先级
  2. 02围绕行为选择测试
  3. 03迭代验证覆盖率
  4. 04简化与审查工作流

适用场景

  1. 01为覆盖不足的前端组件补充测试
  2. 02测试界面交互和错误状态
  3. 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 以查找符合以下条件的文件:

  1. 体积大 + 覆盖率低于平均水平(影响大)
  2. lib/src/components/ 中的核心组件
  3. utils/src/ 中的工具函数

跳过:覆盖率 >97%、自动生成、.d.ts、测试文件。

第 3 步:实现测试(在子 Agent 中)

启动一个子 Agent 为每个优先文件实现测试。向该子 Agent 提供:

  • 目标文件路径及其在 coverage-final.json 中的未覆盖行
  • 阅读源码、现有测试并编写新测试的指令
  • 下方的测试选择准则

该子 Agent 应:

  1. 阅读源码和现有测试以理解缺口
  2. 为以下内容编写测试:条件渲染、事件处理器、错误状态、边缘情况、无障碍性
  3. 遵循 RTL 最佳实践:按 role/label 查询,测试行为而非实现
  4. 运行新测试以验证其通过: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 步:简化、审查并处理反馈

一旦所有测试通过且覆盖率目标达成:

  1. 运行 simplifying-local-changes 子 Agent 以清理并简化代码改动。等待完成。
  2. 运行 reviewing-local-changes 子 Agent 以审查改动。等待完成并阅读审查输出。
  3. 处理审查反馈:对于每条建议,如果有效且能提升代码质量则实现它;如果不适用或会导致过度设计,则跳过并简要说明理由。
  4. 运行 /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