← 所有文章
·vibe-codingregression-testingai-testingcihow-to

vibe coding 的应用,上线前该怎么测

先说结论: 别想着全测——只把「一旦坏了你会很难堪」的那几条流程锁死(注册、登录、结账),每一条变成一个你自己拥有、在 CI 里零 AI 运行的测试,然后逼着下一次 agent 改动去过它。目标不是覆盖率,而是一份 AI 没法偷偷违反的契约。

Vibe coding 是一种真正新的开发方式:你描述想要什么,agent 把它写出来,几分钟后你就有了一个能用的界面。坑出现在第二个功能上。agent 只对着眼前这句 prompt 优化——「加个折扣码输入框」——它并不记得结账昨天是好的。它把框加上了,顺手在某个地方把原本没问题的东西弄坏了。而你没发现,因为你点的是新功能,不是旧功能。

所以「给 vibe coding 的应用做测试」其实就一个问题:哪些行为必须扛过接下来上百次 AI 改动,你怎么让它们坏不了? 下面这套流程有效。

1. 点名哪几条流程绝不能坏

别冲动去测所有东西——对一个刚起步的应用,那是你一周后就会放弃的维护负担。列出那三到五条、一旦悄无声息地挂掉就会让你丢客户或丢脸的流程:

  • 新用户能不能注册完直接进到登录态?
  • 他们能不能做你这个应用存在的意义那件事(发帖、上传、生成、预订)?
  • 他们能不能付钱?

这就是你的上线关键集。其余的都能等。

2. 声明行为,而不是实现

在碰 selector 之前,先用大白话写下每条流程里「能用」到底指什么一个访客开始结账,会被送去登录,而且他的购物车在这一来一回之后还在。 这就是契约。它不提按钮什么颜色、也不提哪个 CSS 类,所以它扛得住重设计——只有当行为真的错了,它才会红。

先写契约,是这里最关键的一步。如果你让 AI 先写代码、再写测试,那测试只会把代码碰巧做的事重新描述一遍——连 bug 一起描述进去。需求必须在前,代码去拟合它。

3. 把每条契约变成一个你拥有的测试

现在让它可执行。最快的路子,是让编码 agent 把真实流程走一遍,结晶成一个纯粹的 @playwright/test——就是那种你本来会手写、躺在你自己仓库里的文件。用 Hover,一个 MCP prompt 就行:

/mcp__hover__guard    # 记下契约:什么必须为真
/mcp__hover__test_app checkout   # agent 走一遍流程,存下 spec

要紧的性质不是「agent 写的」,而是 record == replay:agent 通过接地工具操作(按 role 和 name),所以驱动每次点击的那个 selector,正是被存下来的那个。这个 spec 是确定性的、语义化的,而且归你。明天删掉 Hover,它照样跑。

你也可以手写这些。这一步的重点只有一个:产出是你仓库里一个标准的测试文件,而不是困在别人云端的一段录制。

4. 每次改动都在 CI 里跑——而且零 AI

回归就是在这里被真正抓住的。把这些 spec 接进 CI(每个 pull request 都 npx playwright test),让它们在每一次 AI 改动时都跑,而不是等你想起来才跑。关键在于:这一步没有任何模型参与,就是纯 Playwright——所以一次绿是确定性的、不烧 token、而且每次都代表同一件事。写功能的那个 agent,没资格给自己的作业打分。

到这里闭环就合上了。agent 加上折扣框;CI 重放结账;如果购物车过不了登录了,pull request 会在到达用户之前变红。

5. spec 漂移时,本地自愈——别在 CI 里自动重写

真实 UI 会有意地改,所以一个 spec 迟早会因为行为合理地变了而失败,而不是因为有 bug。错误的修法,是让 CI 在跑的过程中调模型来自愈——这下你的闸变成非确定性的,你还在花 token 把红的刷成绿的,而这恰恰就是真回归被糊弄过去的方式。

正确的修法是分诊:这是漂移(应用改了,更新测试),还是 bug(应用坏了,修应用)?Hover Cloud 对每一次失败做这个判断,把 heal 提示回传到你的编辑器,你在本地修、像审别的改动一样审那条 diff。契约只有在去动它时才动。

别这么做

  • 别指望 agent 自查。 这次 prompt 之前什么是好的,它根本不记得(详见你的编码 agent 不知道自己弄坏了什么)。
  • 别靠点点点的手动 QA。 你测的是刚做的功能,回归藏在你没再打开的那个功能里。
  • 别第一天就追 100% 覆盖。 五条坏不了的流程,胜过五百条一碰就红的。
  • 别把 AI 放进 CI 关键路径。 绿,应该是免费、快速、确定的。

常见问题

做这个需要会 Playwright 吗? 不需要。agent 从真实流程里把 spec 写出来;它们落成标准的 Playwright 文件,你想的话之后能随时读、随时手改。

UI 一改测试是不是就全红? 很少——它们盯的是 role 和 label,不是 CSS。只有行为变了才会红,而那正是你想被通知的时候。

对 vibe coding 的节奏来说,跑测试是不是太慢? 上线关键集很小,在你正常的 CI 里几秒到一两分钟就跑完——重点是它自动跑,所以迭代速度还在,而安全网一直开着。

这一切会把我的代码发给第三方吗? 不会。spec 在你自己的 CI 里跑,编写工具在本地跑。离开你机器的是行为契约,不是你的源代码。

Vibe coding 把「造东西」的成本压到了几乎为零。剩下的成本是知道它还能用——而这一部分,恰恰是你最不该交还给那个造出它的 AI 的。

在你自己的应用上试试 Hover。

把 Hover 的 MCP 加到你已经在用的编码 agent。它探索你的应用,结晶出你自己拥有的纯 Playwright spec。

npm i -g @hover-dev/mcp && claude mcp add hover -- hover-mcp阅读快速开始 →