Macro测试策略全解:vitest+Playwright+Rust集成测试三层防线
2026/9/16 23:23:49 网站建设 项目流程

Macro测试策略全解:vitest+Playwright+Rust集成测试三层防线

【免费下载链接】macroMacro is a unified workspace for teams: email, chat, docs, tasks, agents, calls, and CRM — @-linked together with shared AI memory.项目地址: https://gitcode.com/GitHub_Trending/macro3/macro

Macro 是一款团队统一工作区(email、chat、docs、tasks、agents、calls、CRM 全部 @-linked 协同),它的代码质量靠一条清晰的三层测试防线支撑:前端单元测试用vitest,浏览器端到端用Playwright,后端 Rust 集成测试跑在本地 E2E 栈上。本文带你读懂这套组合拳是怎么搭起来的。

一、三层防线总览:各管一段,互不越位

层级工具测什么速度
第一层vitest前端组件、缓存、GraphQL、业务逻辑秒级
第二层Playwright真实浏览器里的完整用户旅程分钟级
第三层Rust 集成测试(local E2E 栈)服务、数据库、WebSocket 的真实行为需 Docker

二、第一层防线:vitest 多项目单元测试 🧪

前端仓库 apps/web/vitest.config.ts 用 vitest 的projects 机制把上千个测试文件切分成十几个独立“项目”:

  • core / queries:核心库与查询层
  • graphql-cache / urql-solid:GraphQL 缓存相关测试单独启用jsdom环境(见 vitest.config.ts 第 52-66 行)
  • feature 级项目:email、channel、notifications、block-call 等各模块独立配置,互不干扰
  • 跨包项目packages/email-rendererpackages/collaborationpackages/lexical-core也接入同一入口

好处是:每个项目只加载自己需要的插件与环境(比如 SolidJS 响应式构建),失败定位快、并行效率高。

本地运行方式:在apps/web目录下执行just test-watch(定义于 apps/web/justfile),即可进入 watch 模式,改动即测。

三、第二层防线:Playwright 浏览器端到端测试 🌐

Playwright 配置在 apps/web/playwright.config.ts,有两个值得学习的设计:

1. 三种运行模式自动切换

  • 本地开发webServer直接bun run dev起开发服务器,且reuseExistingServer复用已开实例
  • CI 环境:跑vite preview预览生产构建,forbidOnly防止误留test.onlyretries: 1兜底偶发失败(见 playwright.config.ts 第 146-152 行)
  • 本地 E2E 模式LOCAL_E2E=true时只跑单 worker 的 chromium 项目,保证与种子数据共享的确定性

2. 登录态复用

CI 模式下的 chromium/firefox/webkit 三个浏览器项目都依赖setup项目先生成登录态playwright/.auth/user.json,再并行执行用例(见 playwright.config.ts 第 86-126 行)。

3. 本地 E2E 种子数据驱动

真正的重头戏在tests/e2e/local-*.spec.ts系列文件。以冒烟测试 apps/web/tests/e2e/local-smoke.spec.ts 为例:它读取localE2ESeed固定种子数据,断言文档列表和频道页面正确渲染出预期的实体(如 第 31-42 行)。这套文件与 Rust 集成测试共享同一份 seed fixture,保证前后端测的是同一个世界。

一键启动整套本地 E2E(起隔离栈 → 种子数据 → 跑 Playwright):

just local-e2e # 仅 web 套件 just local-e2e-rust # 仅 Rust 集成测试 just local-e2e-all # 两者都跑

配方定义见 tooling/just/xtask.just,底层由 xtask 本地编排器统一拉起 Docker 服务栈。

四、第三层防线:Rust 集成测试 + 本地 E2E 栈 🦀

Rust 侧测试位于 crates/integration_tests/local_e2e/,包含三个测试入口:

  • channel_mutations.rs:频道增删改查
  • channel_websocket.rs:WebSocket 实时推送
  • bot_entity_access.rs:机器人实体权限边界

关键设计(见 crates/integration_tests/local_e2e/README.md):

  1. #[ignore]隔离:这些测试默认被忽略,日常cargo test不依赖 Docker 服务,只有显式-- --ignoredjust local-e2e-rust才运行
  2. 确定性栈:通过 xtask 编排器启动独立命名实例,种子数据与 Playwright 共用,跑完即弃,不留脏状态
  3. 测试后自清理:如 bot 权限测试用随机 UUID 建数据、验证后自行删行

此外,各数据库 crate(如 crates/macro_db_client/)还内置大量fixtures/*.sql离线 fixture 与单测,配合SQLX_OFFLINE=true的 clippy/check 门禁(tooling/just/rust.just),在提交前就把问题拦下。

五、给新手的可复制清单 ✅

  1. 单元优先:像 Macro 一样用 vitest projects 拆分测试域,让每个测试目录独立配置环境
  2. E2E 要“种子化”:固定种子数据 + 确定性栈,比每次手点一遍 UI 稳得多
  3. Rust 集成测试默认 ignore:保持日常cargo test秒级反馈,重活交给专用编排命令
  4. 一键入口:把“起栈 → 种子 → 跑测试”封装成just local-e2e-all这类单一命令(参考 根 justfile),新人五分钟就能跑通
  5. CI 加保险forbidOnly、失败重试、trace 保留(trace: 'retain-on-failure'),一个都不能少

这套三层防线让 Macro 在覆盖邮件、聊天、文档、CRM 等十几个功能域的同时,依然保持了从秒级单测到分钟级 E2E 的完整反馈梯度——值得任何中大型前端 + Rust 全栈项目借鉴。

【免费下载链接】macroMacro is a unified workspace for teams: email, chat, docs, tasks, agents, calls, and CRM — @-linked together with shared AI memory.项目地址: https://gitcode.com/GitHub_Trending/macro3/macro

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询