用途:为 Vite + React + TypeScript 单页应用编写和搭建组件测试层。组件测试位于 Vitest 单元测试与 Playwright 端到端测试之间,渲染真实组件树,断言用户看到和操作的内容,覆盖组件、hooks 与数据获取之间的集成。
主要能力:用 React Testing Library 渲染与查询,用 user-event 驱动交互;用 MSW v2 在网络边界模拟请求,使真实 HTTP 客户端与序列化逻辑照常运行;用 vitest-axe 断言渲染结果无可检测的可访问性违规。资料列出的版本包括 @testing-library/react 16.x、user-event 14.x、jest-dom 6.x、msw 2.x、vitest-axe 0.1.x、@tanstack/react-query 5.x、vitest 3.x 与 jsdom。
使用方式:在 vitest.config.ts 中启用 @vitejs/plugin-react,设置 test.environment 为 jsdom、globals 为 true,并指向 setupFiles;setup 文件导入 @testing-library/jest-dom/vitest 与 vitest-axe/extend-expect,并管理 MSW server 的 listen/resetHandlers/close 生命周期。查询优先 getByRole、getByLabelText,getByTestId 仅作最后手段;每次交互都要 await;异步结果用 findBy* 或 waitFor;用自定义 render 提供 QueryClient(retry: false)等上下文;最后用 axe(container) 断言 toHaveNoViolations。
适用场景:编写组件测试、搭建组件测试环境、模拟 HTTP 数据获取边界、测试 TanStack Query 的加载/空/成功/错误状态、测试表单并断言请求体、为已有测试添加运行时可访问性断言。
限制:不负责 Vitest 运行器配置、覆盖率与 CI;不负责 Playwright 端到端测试;不负责静态可访问性 lint;不负责路由测试 harness。vitest-axe 需要真实 DOM,应使用 jsdom 而非 happy-dom,因为 happy-dom 的 isConnected 行为会破坏 axe 遍历。axe 只能检测部分 WCAG 问题,不能替代人工与辅助技术审查。MSW 的 listen() 必须在 HTTP 客户端创建前运行,否则请求会绕过模拟。