跳转到内容
supastack
浏览文档
WebNext.js

For AI agents: fetch the complete documentation index at /llms.txt, the full documentation corpus at /llms-full.txt, the agent skill at /skill.md, or this page as Markdown at /zh/docs/web/testing.md (or send Accept: text/markdown).

测试策略

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

询问本指南
打开方式

安装与配置

在执行任何步骤之前,请阅读开始之前 和终端基础知识。这些说明假设您在 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 之前的空闲端口;这可以防止测试悄悄地针对另一个项目。

常见问题

14 个问题

supastack 是什么?

supastack 是用于构建 AI 驱动 SaaS 产品的模块化基础。它把通用基础设施整合在一起,让你专注于产品专属的功能。

它支持 Web 和移动端吗?

支持。supastack 包含 Next.js 与 Expo 应用,作为 Web 与移动端体验的起点。

包含哪些认证方式?

Better Auth 覆盖邮箱/密码、OTP 与社交登录。个人工作区随账户一起开通,产品记录从第一天起就有边界。

AI 是如何支持的?

supastack 包含可配置的多供应商 AI、用量追踪、预算,以及加密的自带密钥(BYOK)支持。

订阅如何处理?

对于基于该套件构建的产品,Stripe 计费、订阅与权限构成付费访问的基础。供应商密钥仅存于服务端。

我的产品专属代码放在哪里?

产品专属功能保留在独立的代码库中,产品通过配置接入 supastack 的基础模块。

supastack 如何定价?

套件为一次性购买、终身更新:单框架 249 美元(限时优惠价,较常规价 349 美元优惠 100 美元),或全框架(Next.js、iOS、Android)499 美元(限时优惠价,较常规价 599 美元优惠 100 美元),每个额外开发者席位 75 美元。套件本身没有订阅。本站结账后通过邮件发送许可证密钥,仓库访问通过 GitHub 邀请授予。

工作区如何界定我的数据?

用户记录按 workspaceId 划定边界。身份、权限、AI 用量、计费事件与审计条目都留在个人工作区边界内。

后台任务如何工作?

Trigger.dev 是明确的任务运行时。JobRunner 契约只承诺 enqueue、status 与 cancel——工作流语义保持 Trigger.dev 专有且显式。

邮件与营销触达有何不同?

事务性邮件覆盖产品工作流,如任务完成通知。冷触达与营销活动属于产品自身的范畴,不在本套件的邮件模块内。

移动端购买如何运作?

移动端已支持 RevenueCat 原生购买和恢复购买,访问权限由服务端验证。发布前需配置商店账户并完成设备测试。Web 计费保持独立。

AI 供应商密钥存放在哪里?

自带密钥凭证经过加密且仅存于服务端。密钥在日志中被脱敏;用量与预算在工作区级别保持可见。

结账支持哪些付款方式?

Stripe 托管结账接受银行卡,在 Stripe 账户启用后还可提供支付宝与微信支付——方便中国买家。钱包授权为异步确认,付款完成后许可证页面会立即更新。

我能申请退款吗?

获得代码仓库访问权限后,supastack 将永久归你所有,因此无法退款。但请放心,你将获得包含终身更新的完整源代码,可为你自己或客户构建并发布无限数量的产品。你只需注意不能转卖代码,也不能将仓库作为启动模板二次分发。

CN
主题