1. React 测试(Testing Library、Vitest Browser Mode)
React 测试如何用 Testing Library 与 Vitest Browser Mode 落地?两者的分工与边界是什么?
- Testing Library 的测试哲学(用户视角)
- Vitest Browser Mode 的真实浏览器执行
- 与 jsdom 环境的取舍
Testing Library(RTL + jest-dom + user-event)以"用户视角"测试:通过可访问性角色查询元素(getByRole)、模拟真实交互(user-event 的完整事件序列)、断言可访问状态,避免测试实现细节(不测组件内部 state 与 DOM 结构);搭配 Vitest 作为测试运行器(快、TS 原生、E2E 集成)。Vitest Browser Mode 让测试在真实浏览器(Playwright/WebdriverIO 驱动)中运行:完整 DOM、真实布局与事件系统(jsdom 缺失的 offsetWidth、focus 行为、滚动、剪贴板等),原生 ESM、真实 fetch;与 jsdom 环境的差异是"保真度"——浏览器模式能测"jsdom 模拟不了"的行为(测量、动画、键盘焦点序列、浏览器 API)。
分工与边界:单元/组件测试默认 jsdom(快、稳定、适合逻辑与交互断言);涉及真实布局、浏览器 API、无法 jsdom 模拟的行为用 Browser Mode;两者共享同一套 Testing Library API(测试代码可移植);Browser Mode 比 jsdom 慢、比 Playwright E2E 快(无完整应用启动),定位是"真实浏览器中的组件/集成测试";CI 中 jsdom 层跑全量、Browser Mode 跑精选(交互复杂、布局敏感)测试;注意 Browser Mode 下并发(worker 数)、资源与浏览器版本管理。工程建议:分层测试(jsdom 单测 → browser 组件测 → E2E),按"行为保真需求"选择环境。
答题先讲 Testing Library 的用户视角哲学,再讲 Browser Mode 的保真度优势与 jsdom 的边界,最后给分层测试策略与环境选型标准。