00 / 00
测试与验收
移动端模板的测试范围、命令和人工检查清单
移动端模板的验收分三层:代码契约、构建产物、真机行为。前两层适合放进 CI;真机行为在发 preview build 前人工确认。
代码契约测试
运行:
vpr @01mvp/mobile#test
vpr @01mvp/api#test src/client/mobile/orpc.test.ts当前测试覆盖:
| 测试 | 证明什么 |
|---|---|
mobile-env.test.ts | 没有 .env.local 时模板仍可启动;非法 URL 会在 client 创建前失败 |
mobile-template-contract.test.ts | app.json、默认 scheme、模板脚本和关键依赖保持一致 |
revenuecat-config.test.ts | iOS / Android RevenueCat 公钥按平台选择,Web 或空 key 不误启用 |
orpc.test.ts | Better Auth Expo cookie 会写入移动端 oRPC 请求头 |
如果你改了 app identity、脚本、Auth cookie prefix、RevenueCat 变量或 API client,应该先更新这些测试,再改实现。
类型检查和 lint
vpr @01mvp/mobile#type-check
vpr @01mvp/mobile#linttype-check 确认 Expo app、React Native 组件、配置 helper、测试文件都能通过 TypeScript。lint 负责格式和基础代码规范。
构建烟测
vpr @01mvp/mobile#build这个命令会执行 Expo web export。它不能替代 iOS / Android 原生构建,但能快速发现:
- Expo Router 路由无法打包
- Uniwind CSS 入口缺失
- 原生模块被错误地同步引入 Web bundle
- public env 读取逻辑在构建期报错
MVP 发布前最小组合
如果目标是交付一个可内测的 App,不要只跑单一命令。至少覆盖这几层:
| 层级 | 必跑或必验 | 证明什么 |
|---|---|---|
| 代码 | type-check、test、lint | 公开配置、客户端 helper 和基础契约没破 |
| Web bundle | vpr @01mvp/mobile#build | Expo Router、样式和 JS 依赖可打包 |
| 原生包 | EAS development 或 preview build | 图标、scheme、权限、原生模块能在真机运行 |
| 账号链路 | 注册、登录、退出、profile API | Auth cookie、API base URL、服务端 trusted origins 正确 |
| 业务链路 | Todo / 笔记 / 会员 / 通知等核心路径 | MVP 的主要功能不是只在 Web 可用 |
| 发布资料 | 隐私政策、测试账号、商店说明 | TestFlight 或商店审核不会卡在资料缺失 |
AI 可以自动跑代码检查、构建和大部分脚本验证;真机权限、商店账号、审核问卷和测试账号资料需要用户提前准备。
文档链接检查
vpr @01mvp/web#docs:check-links新增或改名 mobile 文档时必须跑。它能发现侧边栏路径、Card 链接和 MDX 内部链接是否断掉。
真机验收清单
本地代码检查通过后,至少在 iOS Simulator 或真机完成这几项:
- App 首屏能打开,没有空白页
API status显示服务端可达- 邮箱注册或登录能成功
- 登录后
account.profile能返回用户资料 - 退出登录后受保护 API 不再请求或不再显示旧用户
- Web pricing 按钮能打开正确网页
- 配置 RevenueCat key 后,entitlement 状态不会让 App 崩溃
- Todo 提醒或晨报通知启用后,拒绝权限、允许权限、关闭开关都能正常处理
- 多端编辑同一条数据后,App 不会显示已经退出登录或已删除账号的旧缓存
真机调试时,EXPO_PUBLIC_SERVER_URL 必须是设备能访问的地址。局域网 IP 和 HTTPS tunnel 都可以,localhost 只适合模拟器的部分场景。
EAS preview 验收
准备内测前运行:
vpr @01mvp/mobile#eas:build:previewpreview build 安装后检查:
- App 名称、图标、启动页正确
- Deep link scheme 能打开 App
- 登录、受保护 API、付费状态和外部网页跳转可用
- iOS / Android 权限弹窗文案符合产品语气
- 生产 API URL 没有写成本地或 tunnel 地址
- App Store / Google Play 内购产品没有接入时,付费入口有可理解的未配置状态
- 远程推送还没上线时,本地通知或关闭状态不会让用户困惑
TestFlight / 内测前检查
准备给真实测试用户前,补这一轮:
- iOS build 已上传到 App Store Connect,并能在 TestFlight 安装
- Android build 已进入 Google Play 内部测试或可控的 preview 分发
- 测试账号能覆盖未付费、已付费、无数据、有数据四种状态
- 隐私政策和服务条款链接能在 App 内或商店资料里打开
- 反馈入口能让测试用户联系到团队
- 崩溃、白屏、API 不可达时不会停在空白页
什么时候需要补测试
以下改动必须补或更新测试:
- 新增公开环境变量
- 改
app.jsonidentity 或 EAS 脚本 - 改 Auth cookie、session storage 或 oRPC header 逻辑
- 改 RevenueCat entitlement 判断
- 新增移动端共享 helper
- 调整文档路径或侧边栏结构
这篇文档有问题?