Jerbix

测试

三层测试的分工、常用命令与新增 E2E 的判断标准

最近更新 2026 年 11 月 3 日


E2E 只守「用户能不能完成一件事」,细节交互交给组件测试。 这页讲三层测试怎么分工, 以及新增用例前该先问什么。

三层分工

层范围位置运行方式
单元纯逻辑:模块门禁、主题解析、locale 归一化、env 校验、邮件模板tests/unit/vitest run --project unit
组件单页面 / 单组件的交互与渲染:表单校验、菜单开关、断点布局、文案tests/components/vitest run --project components(jsdom)
E2E跨页面、跨服务的用户旅程:注册登录、个人中心读写、模块门禁、关键页面可访问e2e/pnpm test:e2e(Playwright)

另有 tests/workers/,在 Cloudflare Workers 运行时里跑,用 pnpm test:workers 单独执行, 不并入 pnpm test。

什么该写 E2E

新增 E2E 前先问这两句:

  1. 这条用例守的是哪条核心流程? 答不上来就下沉到组件测试。
  2. 它真的需要真实浏览器、真实服务端、真实数据库吗? 只是元素位置、断点下的溢出、

动画开关、hover 位移、锚点滚动、TOC 结构、单个字段的校验提示、静态文件内容 (sitemap / robots / manifest)的话,用组件测试或构建期断言覆盖,成本低一个数量级。

单条 spec 保持在 10 条以内,整套 E2E 目标 5 分钟内跑完。跨语言行为由单元测试覆盖, E2E 只在一个 locale 上跑主流程。

命令

命令作用
pnpm test全部单元 + 组件测试
pnpm test:affected仅跑受影响的测试
pnpm test:watchwatch 模式
pnpm test:workersWorkers 运行时测试
pnpm test:e2ePlaywright E2E
pnpm test:e2e:uiPlaywright UI 模式
pnpm exec vitest run --project unit只跑单元测试
pnpm exec vitest run --project components只跑组件测试(jsdom)

pnpm test 会先跑 locale:compile,在非交互环境可能被提问卡住——CI 里按 --project 分开跑更稳。

E2E 会启动一个测试专用 server,端口被占用时换一个:

bash
E2E_BASE_URL=http://localhost:3107 pnpm test:e2e

两个坑

  • 点按钮前要等水合。 水合未完成时点击会静默失败——没有报错、没有导航,表现和

产品 bug 完全一样。

  • 并发注册的邮箱要加随机段。 只用 Date.now() 在 fullyParallel 下会撞车。

测试文件放哪、怎么配模块开关见 目录结构;表单相关的组件测试见 表单约定。