#AI#Vibe Coding#TypeScript

Vibe Coding 测试数据:用场景化 Seed 与 Fixture 暴露真实边界

随机造几十条正常记录只会让页面看起来有内容。本文用分层场景、确定性身份、固定时钟、隐私边界与自验证断言,构建可重复的 Seed 和 Fixture。

本文要点

  • 主题聚焦:AI、Vibe Coding、TypeScript
  • 适合人群:独立开发者、全栈工程师、AI 应用开发者
  • 核心价值:快速理解背景、实践路径、常见误区和工程建议
作者 @admin·发布于 2026年7月30日·更新于 2026年7月30日

让 AI “生成 100 个用户和项目”很容易得到一片均匀的正常数据:每个人都有头像,每个项目都有成员,字符串长度相近,时间都在最近几天。界面因此显得完整,真正会出错的空状态、超长标题、撤权成员、过期邀请、跨租户引用和时区边界却一个都没有。数据数量不是覆盖率,随机感也不是真实性。

先区分三种制品。开发 Seed 用来让本地环境可探索;自动测试 Fixture 为单个用例提供最小前置状态;演示数据面向稳定展示,必须可清理且不包含真实个人信息。它们可以共享场景构建器,但生命周期和稳定性要求不同。预览环境隔离 Seed说明了临时环境的命名、归属和回收,本篇聚焦数据本身如何设计。

先列场景,再让 AI 填数据

从领域状态机和授权矩阵提取场景,而不是从表结构逐表填满。以协作产品为例,场景目录可以包含:空组织、仅 owner 的组织、接近成员上限、待接受与已过期邀请、被撤销成员仍有历史活动、同名项目分属两个租户、没有可见项目的用户、跨午夜截止任务,以及已软删除但仍被审计引用的项目。

每个场景有稳定 ID、目的、前置时钟、角色、对象关系和期望断言。命名表达语义,如 tenant_b_revoked_editor,而不是依赖数组第 7 个元素。AI 的任务是根据场景 DSL 生成构建调用和断言;它不能自行增加业务规则。若表约束与场景冲突,应报告模型问题,而不是关闭外键完成插入。

基础构建器只负责合法默认值,场景层显式覆盖有意义的差异。避免一个万能 createEverything(options) 隐藏几十个隐式副作用;组合 createTenant、addMember、inviteUser、createProject 等领域动作,使失败位置可读。测试只请求需要的数据,防止无关 Seed 让用例通过。

确定性比“像真的”更重要

固定随机种子仍不等于完全确定:当前时间、时区、并发顺序、自增 ID 和第三方生成器版本都会改变结果。测试注入时钟,明确 UTC 与展示时区;需要稳定引用的对象使用预定 UUID 或场景别名。排序断言必须有唯一 tie-breaker,不依赖数据库碰巧返回的插入顺序。

生成器版本、locale 与 seed 写入 manifest。Faker 适合填充不参与断言的装饰字段,业务关键字段仍由场景明确给出。不要断言某个随机姓名;断言用户角色、租户归属和生命周期。涉及边界字符串时显式准备空白、组合 Unicode、最大允许长度和相似字符,而不是等待随机库碰到。

数据建立后立即运行自验证查询:外键孤儿为零、每个子对象租户与父对象一致、唯一键无重复、状态所需字段齐全、时间顺序合法。数据库约束是第一层,场景断言覆盖无法直接表达的跨行规则。通过AI 生成代码的属性测试可以从不变量产生更多操作序列,但属性测试的缩减样例要保存为新的固定回归场景。

Fixture 要服务测试隔离

Playwright 的 fixture 可以把准备、使用和清理绑定到测试或 worker 作用域。数据库数据也要选择合适边界:单元测试常用事务回滚;并行 E2E 更适合每个 worker 独立 schema、数据库或带 namespace 的租户,避免一个测试删除另一个测试的数据。共享管理员账号会制造竞态,应为 worker 派生稳定身份。

测试不能依赖执行顺序。每个用例声明场景并可单独运行;清理按明确 owner 标识删除,不执行无条件 deleteMany()。失败时保留场景 ID、数据库代际和必要快照,方便复现,同时在 CI 生命周期结束统一回收。Fixture 的责任和 API mock 对齐可结合API Mock 与 Fixture 漂移门禁,防止前端样例字段已经不被真实后端接受。

迁移测试必须从旧版快照开始,应用迁移后执行断言,而不是只在最新空库运行 Seed。准备最小旧数据、边界数据和不合法但历史上确实可能存在的数据,验证迁移是修复、隔离还是明确拒绝。对批量导入场景,可参考运营 CSV 导入对账的 staging 与行级错误设计,避免一条坏记录让整个场景含糊失败。

不把生产数据伪装成 Fixture

直接复制生产库再“删掉邮箱”通常仍会留下自由文本、文件、稳定标识符和可关联行为。测试数据默认合成;确需使用生产分布时,应走批准的匿名化流水线,按字段分类、验证不可逆处理,并限制访问与保留。AI 不应看到原始敏感样本,更不能把它们写进仓库。

为 Seed 建立门禁:从空库执行两次结果一致;重复运行不产生重复对象;最新迁移后可运行;关键场景自验证通过;并行 worker 不相互可见;清理只删除本次环境;仓库扫描不含真实凭证或个人信息。再故意修改一个外键、时钟或权限,证明断言确实会失败。

好的测试数据不是更长的 INSERT 文件,而是一组可命名、可组合、可独立复现的业务反例。把场景目录和不变量交给 AI,让它减少机械劳动;把身份、时间、隔离和隐私边界固定在构建器与门禁中,Fixture 才会持续暴露问题,而不是只负责把空页面填满。

Related

相关推荐