Ant Design 测试用例审查

SkillMedia

Reviews ant-design test cases to determine whether they are worth keeping. Use when the user asks to validate test cases, review test quality, judge whether tests are reasonable, whether they "prove A with A", whether they are duplicated, whether they lock in implementation details, or decide whethe

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Ant Design 测试用例审查 skill

What this skill tells your AI

The instructions your AI receives, as published by ant-design/ant-design in .agents/skills/test-review/SKILL.md and read by ahel’s review.

目标

一、只判断测试用例是否合理,不负责创建或补充测试。

二、优先识别“用 a 证明 a”、实现细节自证、重复覆盖这类低价值测试。

三、验证场景默认只做静态审查,不默认运行测试。

四、输出先给结论,再给最关键原因。

何时使用

当用户提到以下意图时使用此 skill:

  • 验证测试 case
  • review 测试是否合理
  • 判断测试是否无意义
  • 判断测试是否重复
  • 判断测试是不是“用 a 证明 a”
  • 决定测试应保留、改写还是删除

不做的事

  • 不主动新增测试
  • 不主动补回归测试
  • 不主动修改生产代码
  • 不默认执行 npm testnpm run test:update

如果用户明确要求“顺手给改写建议”,可以在结论后补一句改写方向;但主任务仍然是审查,不是落地实现。

核心判断

一、先看契约是否独立

先用一句话描述这条测试声称在保护什么:

当 <前置条件> 时,<组件/方法> 应该 <可观察结果>。

如果这句话只能从当前实现反推出来,这条测试大概率不值得保留。

二、expected 必须来自独立来源

高质量来源包括:

  • issue / PR 里明确描述的回归现象
  • 组件文档、API、demo、FAQ
  • DOM / React / WAI-ARIA / 浏览器语义
  • 用户可感知的文本、属性、交互、布局结果

低质量来源包括:

  • 生产代码里的同一个 helper、token、常量、分支逻辑
  • 在测试里复制一遍实现
  • “因为实现可能要这样写,所以我断言它这样写了”

三、优先审查外部行为,不审查实现细节

优先级:

  1. DOM / 文本 / 属性 / role / aria
  2. callback 的触发与参数
  3. 用户或使用方能观察到的行为结果
  4. 只有存在独立契约时,class / style 才能作为代理信号

如果断言锁定的是具体 CSS 属性、临时 class、内部状态或中间过程,默认先判低价值。

四、默认拦截样式实现自证

以下写法默认按“无实际作用”或“需要改写”处理,除非能证明它对应公开契约:

  • toHaveStyle(...)
  • toHaveClass(...)
  • 断言具体 CSS 属性、CSS 变量、临时 class 存在

典型反例:

  • expect(node).toHaveStyle({ whiteSpace: 'nowrap' })

如果它只是验证“实现里加了 nowrap”,而不是验证独立可感知行为,就属于“用 A 证明 A”。

五、重复覆盖也应判低价值

以下情况优先判为重复或冗余:

  • 已有 mountTestrtlTest 或其他聚焦行为测试覆盖相同契约
  • 同一组件已有相同 props 组合和同类断言
  • 新 case 只是换文案、换变量名、换写法,没有新增行为分支

输出要求

默认只输出最终结论,不写调研过程。

格式:

结论:此用例无实际作用 / 此用例可保留 / 此用例需要改写
原因:
- ...
- ...

规则:

  • 先下结论,再给原因
  • 原因保留 2 到 4 条即可
  • 不要先讲命令、搜索过程、推理链
  • 除非用户追问,否则不要展开长篇建议

执行流程

1. 静态审查优先

当用户是在验证测试是否合理时:

  • 默认只读代码、diff、文档、demo、已有测试
  • 默认不运行测试
  • 不把“能不能跑过”当成主要判断依据

只有用户明确要求“跑一下”“验证 red/green”时,才执行测试命令。

2. 提炼被保护的契约

先回答:

  • 这条测试到底想保护什么公开行为?

如果回答不稳,优先判为:

结论:此用例无实际作用。

3. 查独立依据

从以下位置找证据:

  • 当前 PR / issue 描述
  • 组件文档与 demo
  • 现有测试
  • 外部语义规范

如果找不到独立依据,而 expected 又来自实现本身,直接判低价值。

4. 查是否重复

需要时搜索现有覆盖:

rg -n "<关键字>|<issue号>|<行为描述>" components/<component> tests

如果同一契约已经被保护,新 case 通常应判为冗余。

5. 给出分类结论

分类标准:

  • 此用例可保留 条件:契约独立、断言面向外部行为、不是重复覆盖
  • 此用例需要改写 条件:测试意图可能对,但断言方式锁定实现或证据不足
  • 此用例无实际作用 条件:expected 同源、实现自证、重复覆盖、只测存在性、只测内部细节

Ant Design 约束

  • __tests__ 中引用仓库内代码时使用相对路径
  • 优先沿用目标组件现有测试结构与 helper
  • 对样式问题,先问“能否用更外层行为表达”,再接受 style/class 断言

快速拦截

以下情况默认直接质疑:

  • 输入 a,expected 也从同一路径算出 a
  • 断言私有 helper / hook / 中间 state
  • 断言 classNamewhiteSpacedisplayzIndex 等具体实现
  • 在已有 mountTestrtlTest 旁边再补同类 case
  • 只做 toBeTruthy() / toBeDefined() 这类存在性断言

Signals

GitHub stars
99k
Forks
55k
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
antd-test-review
Source
github.com/ant-design/ant-design