Integration Testing 是 AI 没办法替你跳过的那一部分
平台跑通了。End-to-end,从头到尾:log in,浏览 lobby,坐到桌子前,看到座位,打开 buy-in 对话框,观察一手牌。
走到这一步花了四篇博文。一个路由 bug、一个数据格式不匹配、一个坏掉的 auth guard、一个悄悄忽略代码变更的开发环境。
也花了 integration testing。这就是这篇要讲的。
测试阶段长什么样
我们用 Playwright 测试 —— 这是个浏览器自动化工具,会脚本化真实的浏览器交互并验证结果。真实浏览器。真实请求。真实渲染的 UI。
这次会话:用测试凭证 log in,到达 lobby,确认桌子的 card 以正确高度渲染,导航到一张桌子,确认 header 栏出现并带有 lobby 按钮和 help 按钮,确认 seat picker 渲染出所有空座位。
第一次跑,每一步都失败了。
Table cards 高度 572 像素,因为 CSS Grid 在某行只有一个 item 时,默认会应用 align-items: stretch。没人指定这个。没人故意破坏它。CSS 就是这么干的。
导航到一张桌子,会让浏览器陷入 redirect 循环。Auth guard 在检查一个永远不会被填充的 router context 值。
这些不是 AI 特有的失败模式。这是只有当整个 stack 一起跑起来才会出现的那一类 bug。在人写的代码里也照样会出现。测试阶段总归会抓到它们。
为什么 AI 生成的代码仍然需要这一步
有一种 AI 辅助开发的版本会把测试当作可选。它的逻辑是:spec 是对的,agent 实现了 spec,所以实现就是对的。
这个逻辑在集成层就崩了。
单个组件可以各自正确实现自己的 spec,但仍然互相通信失败。Spec 描述的是孤立状态下的行为。Integration testing 验证的是组合状态下的行为。一份覆盖了系统每个领域的 100 页规格说明,仍然不会描述每个 CSS Grid 默认值,也不会描述每个 router context 初始化顺序。
把这个东西跑起来,是看清这个东西跑起来是什么样的唯一办法。
人还要做什么
那次测试会话里的每一个失败,都是被一个盯着浏览器的人发现的。Lobby 的 card 拉伸到整页高 —— 这是视觉观察,不会被打到日志里。桌子加载出来一片空白 —— 这需要看 network requests 并注意到 404。Redirect 循环是顺着浏览器的导航历史一步步追出来的。
这些观察,发生在 AI 介入诊断之前。Agent 可以追一个你已经描述出来的 bug。但描述这件事,需要一个理解行为应该长什么样的人。
这不是方法论的局限。这是方法论在正确运转。人定义系统,验证输出,把失败上报。Agent 诊断和修复。这种分工一直贯穿到测试阶段。
现在我们在哪儿
Dev 环境通过了 end-to-end testing。平台在运营上已经就绪。从现在到 open beta 之间:staging 上的最终验证,card payment processor 集成,以及 geofencing 强制。
测试阶段没有结束。它只是往 stack 上面爬了一层。
salty.poker 变更日志 会随着我们每次发版更新。如果你想实时追这个 build,就关注它。
关于工程方法论的完整系列 —— spec 怎么驱动 session、架构师角色在测试阶段是什么样的、以及将近 30 年构建软件教会了你哪些关于迭代的事 —— 那个系列在 The Salty Korean 上并行展开。
Stay salty.
The Salty Korean
Salty Poker Network 的创始人。撰写有关德州扑克、平台构建和在线扑克未来的文章。 更多内容请访问 The Salty Korean.