> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# 测试策略

理解确定性、浏览器、数据库与供应商检查各自证明了什么。

## 安装与配置

在执行任何步骤之前，请阅读[开始之前](https://supastack.dev/zh/docs/web/before-you-start.md) 和[终端基础知识](https://supastack.dev/zh/docs/web/terminal-basics.md)。这些说明假设您在 VS Code 中打开了完整的 supastack monorepo；它的根 package.json 标记存储库根。在 pnpm 命令中，工作区包是应用程序或共享代码文件夹；在产品中，工作空间是团队的数据容器和安全边界。 corepack pnpm --filter ... 从 monorepo 选择一个包，同时从其根运行命令。如果您仅打开同步的移动或桌面文件夹，则它不包含 Web 后端、Docker 设置或根脚本：从此 monorepo 或可访问的托管服务器运行后端，并使用平台文件夹自己的脚本。环境变量是存储在本地 .env 文件或托管仪表板中的命名设置；更改后重新启动相关应用程序，并将服务器机密保留在 NEXT_PUBLIC_ 和 EXPO_PUBLIC_ 值之外。

1. 打开repository-root package.json查看检查命令。

2. 从该根文件夹运行 corepack pnpm test 进行自动化单元测试，然后运行 corepack pnpm --filter @supastack/web typecheck 进行 Web TypeScript 检查。

3. 对于浏览器行为，启动 Web 应用程序并运行 corepack pnpm test:e2e。预期：每个命令报告自己的结果；单元测试并不能证明真实的数据库、支付提供商、电子邮件服务或电话是否有效。

默认测试套件使用确定性的 fake/本地适配器。浏览器测试覆盖用户交互；数据库验收与外部供应商冒烟是独立门槛。先跑与变更行为相关的检查，再扩大范围。

```
corepack pnpm test
corepack pnpm check
corepack pnpm build
corepack pnpm test:e2e
corepack pnpm test:e2e:production
```


## 要复制的命令

按照注释查看命令在哪个文件夹中运行。如果标记了两个终端，请打开两个终端窗口，并在使用第二个命令时保持第一个命令运行。

```
corepack pnpm test
corepack pnpm --filter @supastack/web typecheck
corepack pnpm test:e2e
```


## 实现流程

行为变更先写一个失败的验收测试。让成功访问与匿名、跨工作区被拒成对出现。对表单与任务流，除正常路径外还要验证加载、错误与恢复行为。

被拦截的浏览器响应证明的是界面对该夹具的反应，而不是认证持久化、支付处理、供应商投递或真机回调。


## 验证与排障

如果数据库测试表明它已被跳过，请在报告数据库覆盖率之前设置其隔离的测试数据库。如果Web选项卡位于端口3001，则它是单独的apps/docs服务器；该套件 Web 应用程序在端口 3000 处启动。如果 Playwright 在首次 Windows 运行时失败，请完成浏览器安装并重新运行失败的命令；切勿关闭系统范围的安全性来解决它。

数据库门槛测试跳过时，先配置它的隔离测试数据库，再声称该门槛已通过。如果浏览器 runner 断言全绿却在 teardown 挂住，两个事实都要报告；卡住的进程不是干净的成功命令。

在 Windows 上，当 Defender 扫描新安装的 Playwright 浏览器或依赖项时，初始浏览器运行可能会超时。让安装完成，使用 corepack pnpm test:e2e 或 corepack pnpm test:e2e:production 重新运行失败的套件，并检查其跟踪和防御者保护历史记录（如果再次失败）。启用系统范围的保护。

本地浏览器套件拥有端口 3100，并拒绝重用已在该端口侦听的进程。如果另一个应用程序拥有 3100，则将 PLAYWRIGHT_PORT 设置为 corepack pnpm test:e2e 之前的空闲端口；这可以防止测试悄悄地针对另一个项目。


## 下一篇

[部署清单](https://supastack.dev/zh/docs/web/deployment.md)
