测试与自证
测试放在哪
text
src/test/
├── setup.ts # jsdom + jest-dom 注册
├── unit/ # 纯逻辑:lib/ 下的函数
├── components/ # 组件:Testing Library 渲染 + 交互
└── e2e/ # Playwright:真实浏览器里的整体行为1
2
3
4
5
2
3
4
5
业务目录不并排放测试,src/tsconfig 也把测试排除在应用构建之外。
三个层次各测什么
| 层次 | 工具 | 适合 |
|---|---|---|
| 单元 | Vitest | 纯函数:树扁平化、分页、密码强度、日期区间、指标、i18n key 扫描 |
| 组件 | Vitest + Testing Library + jsdom | 组件的渲染与交互逻辑,例如表格排序、状态徽标语义色 |
| 端到端 | Playwright(真实 Chromium) | 整站行为:布局模式、命令面板、拖动、持久化、对比度 |
bash
pnpm test # 单元 + 组件(--maxWorkers=2)
pnpm test:e2e # 端到端;会自动起 pnpm dev(已在跑则复用)
pnpm test -- tree # 只跑名字匹配的用例1
2
3
2
3
端到端覆盖了什么
| 文件 | 覆盖 |
|---|---|
console.spec.ts | 外壳导航、深色模式写入根元素、列表分页与详情跳转 |
design-system.spec.ts | 分类页可打开且无未翻译 key、排序 / 列管理 / 密度、列顺序拖拽与持久化、行内展开与列宽持久化、虚拟滚动只渲染可视窗口、树搜索与表格树、验证码与密码强度、弹窗拖动、多选与日期区间、上传校验与图片预览、图标搜索复制、固定列、⌘K 命令面板(⌘⇧S 兼容)、无障碍跳转、灰色与色弱模式 |
notifications.spec.ts | 通知角标与已读同步、筛选、搜索区展开收起、通知设置保存、顶栏通知默认排第二、刷新不播进入动画、筛选预设、储物箱增删改、侧栏宽度 / 圆角 / 过渡、布局模式、日期视图切换 |
auth.spec.ts | 登录校验与进入控制台、两处退出入口、注册的手机 / 邮箱验证、找回密码提交态 |
跑一个文件:
bash
pnpm test:e2e src/test/e2e/design-system.spec.ts1
并行与产物目录
Playwright 的 outputDir 默认是 test-results/。多个进程同时跑会互相覆盖,出现"本地假失败":
bash
pnpm test:e2e -- --output=/tmp/pw-admin-out1
CI 与本地钩子都用默认目录,人工并行验证时记得加参数。
截图评审
src/test/e2e/_screenshots.spec.ts 不是回归用例,默认跳过,需要显式开启:
bash
pnpm screenshots # SCREENSHOTS=1,截图写入 /tmp/admin-design-shots1
改动布局或视觉后,先看截图再提交,比逐页点开快得多。
三件套
新增或修改公共组件时,三件套缺一不可:
- 组件总览里加可交互示例(
src/pages/design-system/对应分类页); - 至少一处真实落点(标准页型里真的用上);
- 单元 / 组件 / 端到端测试至少覆盖一条关键路径。
提交前清单
- [ ]
pnpm check全绿(格式、类型、lint、单测、构建) - [ ] 有交互或视觉改动时
pnpm verify全绿 - [ ] 新增能力有总览示例与测试
- [ ] 中英文案同步,没有未登记的 key
- [ ] 没有引入新的运行时依赖(图表、动效、图标库)
- [ ] 示例数据没有写进
lib/或组件默认值