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.tsapp.json、默认 scheme、模板脚本和关键依赖保持一致
revenuecat-config.test.tsiOS / Android RevenueCat 公钥按平台选择,Web 或空 key 不误启用
orpc.test.tsBetter Auth Expo cookie 会写入移动端 oRPC 请求头

如果你改了 app identity、脚本、Auth cookie prefix、RevenueCat 变量或 API client,应该先更新这些测试,再改实现。

类型检查和 lint

vpr @01mvp/mobile#type-check
vpr @01mvp/mobile#lint

type-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-checktestlint公开配置、客户端 helper 和基础契约没破
Web bundlevpr @01mvp/mobile#buildExpo Router、样式和 JS 依赖可打包
原生包EAS development 或 preview build图标、scheme、权限、原生模块能在真机运行
账号链路注册、登录、退出、profile APIAuth 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:preview

preview 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.json identity 或 EAS 脚本
  • 改 Auth cookie、session storage 或 oRPC header 逻辑
  • 改 RevenueCat entitlement 判断
  • 新增移动端共享 helper
  • 调整文档路径或侧边栏结构

这篇文档有问题?