坑库
亲眼看到才算完成
测试验证的是状态,用户看到的是渲染结果。防止“测试全绿、界面没变”就报告完成
亲历小工具产品阶段 · 测试更新于 2026-10-16
一句话规则
UI 改动必须真启动、真打开、亲眼看到结果,才算完成
发生了什么
一个“全屏”按钮。agent 实现完,补了单测:点一下,状态从“非全屏”切到“全屏”。测试全绿,它报告完成。
我自己打开页面点了一下,界面毫无变化。查下来是组件库默认样式的选择器优先级更高,把新加的全屏 class 盖掉了。状态确实变了,只是用户看不到。为这一个按钮,多花了一天,多开了两个 PR。
为什么会这样
测试验证的是状态,用户看到的是渲染结果。从状态到画面还隔着好几环:class 加上没有,样式有没有被覆盖,布局有没有生效。单测一般跑在 jsdom 这类模拟 DOM 里,不做布局,样式表通常也不会真正加载,这几环它根本看不见。
agent 手里只有测试这一个反馈回路,测试绿了,它就有充分的理由说“完成”。真正的问题在“完成”的定义:它被定义成了“测试通过”,而不是“用户看到了变化”。
怎么做
把“亲眼看到”写进 CLAUDE.md 的完成标准:
## 完成标准
- UI 改动:启动 dev server,在浏览器里走一遍改动涉及的流程,附截图,才能说完成
- 只有测试通过、没有截图的 UI 改动,视为未完成让 agent 自己去看。gstack 的 /qa 会在真实浏览器里把流程点一遍,发现问题直接修;只要报告用 /qa-only。没装 gstack,就手动走一遍 happy path 并截图。
CSS 改动多查三处:DevTools 的 Styles 面板里,你写的规则有没有被划掉(被覆盖);暗色模式下对不对;窄屏下对不对。
想固化成自动化测试,就断言渲染结果而不是状态,比如用 Playwright 的 toHaveCSS 或 boundingBox(),检查全屏后元素是否真的铺满了视口。业界做法