00 / 00

测试

01MVP 的单元测试、D1 集成验证、浏览器 E2E 和发布前检查。

01 操作员让产品小车先过测试闸门再上线

测试重点是数据库一致性、权限、登录、支付、上传和公开页面。日常先运行受影响 package 的窄检查,跨模块改动和发布前再运行产品级检查。

产品级检查

vpr @01mvp/product#lint
vpr @01mvp/product#type-check
vpr @01mvp/product#test
vpr @01mvp/product#build

test 覆盖 Web、API、Auth、DB、Credits、Payment、Config、i18n 和其他产品包。数据库相关单元测试使用 mock 或 SQLite 兼容接口,不连接生产 D1。

浏览器 E2E

# 公开页和未登录流程
vpr @01mvp/product#test:e2e:public

# 登录后的关键流程
vpr @01mvp/product#test:e2e:auth

# 完整本地浏览器测试
vpr @01mvp/product#test:e2e

# 生产构建 smoke
vpr @01mvp/product#test:e2e:production

本地 E2E 启动脚本会:

  1. 清理隔离的 .wrangler/e2e 数据目录。
  2. 构建 Cloudflare Worker 产物。
  3. 把已提交 migration 应用到隔离的本地 D1。
  4. 启动 Wrangler 开发服务器。
  5. auth-setup 通过注册页创建第一个管理员,并保存本次测试的认证状态。

它不使用 DATABASE_URL、远程 D1 或生产账号,也不需要数据库 seed。认证状态写到已忽略的 test-results/.auth/,不要提交。

运行线上 smoke

设置 PLAYWRIGHT_BASE_URL 后,生产 smoke 会直接访问指定站点,不会启动本地服务:

PLAYWRIGHT_BASE_URL=https://example.com \
  vpr @01mvp/product#test:e2e:production

线上 smoke 只能执行无破坏、可重复的检查,例如公开页、健康接口、登录入口、静态资源和安全 header。不要让它创建订单、扣积分、修改后台配置或清空数据。

数据库变更怎么测

修改 schema 后:

vpr @01mvp/product#db:generate
vpr @01mvp/product#db:migrate
vpr @01mvp/db#test
vpr @01mvp/product#test:e2e

重点验证:

  • migration 能从空本地 D1 完整应用。
  • 时间、布尔值、JSON 和十进制文本读写正确。
  • 多语句原子操作使用 D1 batch、条件更新或经过审查的 trigger。
  • 唯一约束、外键和最后一个超级管理员保护仍然生效。
  • D1 proxy 对未授权请求拒绝,对 batch 返回与 binding 一致的结果。

远端 migration 在本地验证和代码审查通过后再执行:

vpr @01mvp/product#db:deploy

新产品裁剪后的测试

使用初始化 Skill 删除能力后,不要只检查首页能打开。AI 还应扫描被删除能力的路由、包依赖、schema、migration、环境变量、文档和导航残留,再运行目标产品自己的 lint、类型检查、测试和构建。

这篇文档有问题?