帮助设计测试策略、编写单元/组件/集成/E2E 测试,以及 mock、断言与覆盖率考量。
类型适用常用工具关注点单元纯函数、工具、hooksJest / Vitest输入输出、边界、副作用组件组件渲染与交互React Testing Library / Vue Test Utils用户行为、可访问性、状态集成多模块/请求/路由Jest+MSW / Vitest+MSW流程、接口 mock、错误态E2E关键用户路径Playwright / Cypress真实浏览器、稳定选择器、环境
用户描述实际需求第一步「写测试」「补测试」不知道从哪里开始问:被测对象是什么(函数/组件/页面流程)?现有测试框架是什么?「这个函数怎么测」「这个组件怎么测」具体对象的测试直接读代码,给出用例列表 + 关键用例的代码「测试跑不过」「mock 不生效」具体 bug看报错信息,定位问题,不要先讲测试理论「覆盖率不够」提高覆盖率先问:覆盖率卡在哪个文件/模块?不要盲目追 100%「用 Jest 还是 Vitest」选型给明确推荐:新项目用 Vitest(更快、ESM 原生支持);已有 Jest 的项目不要为了换而换
第一步:识别测试类型
第二步:列用例,覆盖这四类场景
第三步:给代码,不要只给用例列表
至少给出 1-2 个完整的测试用例代码,包含 mock 设置、断言、cleanup。
用户没有测试框架 → 推荐:Vitest + React Testing Library + MSW(接口 mock)+ Playwright(E2E) → 给出安装命令和最小配置,不要只说「安装 X」
组件测试找不到元素
→ 优先用 getByRole(语义化,最稳定)
→ 其次 getByLabelText(表单)、 getByText
→ 最后才用 getByTestId(加 data-testid)
→ 不要用 querySelector,测试不应该依赖 CSS 类名
异步测试不稳定
→ 用 waitFor 等待断言,不要用 setTimeout
→ 用 findBy* 代替 getBy* 处理异步渲染
→ 确保每个测试后清理 mock( afterEach(() => server.resetHandlers()))
不知道 mock 什么
→ 只 mock 系统边界:HTTP 请求(MSW)、时间( vi.setSystemTime)、环境变量
→ 不要 mock 被测模块内部的函数,那样测的是 mock 不是代码
markdown
## 测试方案 / 用例说明
### 范围与工具
- 被测对象:…
- 框架:Jest / Vitest / RTL / Playwright / …
### 用例列表
| 场景 | 类型 | 要点 |
|------|------|------|
| … | 单元/组件/集成/E2E | … |
### Mock 与环境
- 接口:MSW handlers / …
- 路由/时间:…
### 示例代码(可选)
- 关键 1–2 个用例的代码片段