Test Audit 是 Supabase CLI 项目中的一项测试质量技能,适用于任何测试被编写、修改或审查的场景。它通过两种共享同一价值标准的模式来约束测试质量:编写门禁和审计模式。
用途
该技能的核心目的是防止低价值、重复或冗余的测试进入代码库,并清理已有的此类测试。它既在测试写入时进行前置把关,也对现有测试套件进行只读审计。
编写门禁
在添加任何测试之前,必须回答以下四个问题,缺少任一答案即表示暂不应添加:
- 它保护什么行为?
- 什么可信的回归会让它失败?
- 为什么现有覆盖已经无法捕获该失败?
- 它是否需要仅测试用的生产接缝(只暴露内部实现的导出、标志或包装器)?如果需要,应将测试移到真实边界。受控时钟,或生产环境同样读取的预算或配置值,是可以接受的。
同样的四个问题也适用于审查中建议新增测试或断言的场景,当这些建议没有保护任何东西时应予以反驳。
层级规则
每个契约只在能够触达它的最强边界保留一个主测试:纯逻辑用单元测试,处理器和 Effect 层用集成测试,通过 runSupabase() 的子进程边界用 e2e 测试,仅当命令必须触达真实平台或数据平面时才用 live 测试。第二层级需要第一层级无法触达的独特风险,而不是同一契约的重复。命令 e2e 保持在一到三条黄金路径。优先在现有表驱动用例中新增一行,而不是创建近似重复的测试。
垃圾模式
以下任一模式的新测试应被拒绝,现有测试应被标记:
- 同一契约在多个层级重复(单元、集成、e2e、live 都断言同一分支)
- mock 或 Effect 测试层实现了被断言的行为,而不是替代真实协作者
- 期望值由被测辅助函数生成,而非独立来源
- 负向控制因无关原因通过,例如在被测路径运行前就被另一个守卫拒绝输入
- 测试名称承诺的内容超出测试实际覆盖范围
- 对生产超时或退避的实时等待,例如 it.live 用例在重试计划中休眠;应使用受控时钟或注入预算
保留标准
始终保留为公共 CLI 行为、配置、持久化、安全、平台或已发布包契约提供独特证明的测试。慢或静态从来不是删除它的理由;在另一层级断言相同内容的副本仍可被合并。
回归测试
修复缺陷的测试必须证明在修复前代码上因预期原因失败,修复后通过。从未可证明失败的回归测试证明的是 mock,而不是修复。
审计模式
发现阶段保持只读:在每位候选都记录证据之前不做任何编辑。在改动任何内容之前,为每位候选记录:
- 该测试实际能检测到什么
- 没有它时仍然保留或将会保留的更强证明
- 删除它会释放哪些仅测试用的生产接缝
然后在简短台账中标记,每条标记一行证据:
- R 保留 — 指明契约及其捕获的回归
- F 修复 — 保留契约,修复薄弱或空洞的断言
- C 合并 — 指明吸收它的归属(同级表行、更强边界套件)
- D 删除 — 指明仍然保留的证明,或不存在契约
在审计响应中报告台账,或在有活动跟踪 issue 时报告在其中,绝不写入 PR 描述。优先选择少量高置信度候选,而非大规模推测性清扫。
适用场景
该技能适用于 Supabase CLI 项目的测试编写、修改和审查流程,尤其适合需要统一测试质量标准、清理冗余测试或审查测试建议的场景。
限制
该技能的具体实现细节、安装方式、配置参数、平台支持范围及收费情况暂未提供。