在一个基于 React 的项目里,怎样开展单元测试?有哪些常用测试工具可供选择?
考察说明
考查对 React 单元测试工具链和测试方法的掌握程度。
回答思路
- 【回答框架 1】React 单元测试主要涉及测试框架、断言库、DOM 模拟和组件渲染等工具。常见的组合包括 Jest 作为测试运行器和断言库,配合 React Testing Library 或 Enzyme 进行组件渲染和交互测试。
- 【回答框架 2】Jest 是 React 官方推荐的测试框架,它内置了断言、mock 和覆盖率等功能,支持快照测试。React Testing Library 以用户视角测试组件,鼓励测试组件的公共接口,比如点击行为、文本呈现,而不是内部实现细节,更易维护。
- 【回答框架 3】测试组件时,通常使用 render 方法渲染组件,使用 fireEvent 或 userEvent 模拟用户事件,然后断言界面上呈现的内容或调用的函数。还需要注意使用 act 来包裹触发 React 状态更新的操作,避免警告。
- 【回答框架 4】对于异步逻辑,可以结合 waitFor 或 findBy 方法等待异步更新。对于网络请求,使用 Jest 的 mock 功能模拟 fetch 或 axios。此外,组件测试还常涉及路由、上下文等,需要在外层包裹对应的 Provider。
- 【关键点 1】Jest 是当前 React 项目中最常用的测试框架,其内置断言和 mock 功能。
- 【关键点 2】React Testing Library 提倡行为测试,通过用户可感知的 DOM 元素进行断言。
- 【关键点 3】测试交互时需使用 act 包裹状态更新,避免 React 警告。
- 【关键点 4】异步测试可使用 findBy 或 waitFor 等待元素或条件出现。
- 【易错点 1】使用 Enzyme 时容易测试内部实现,导致重构时测试频繁失败。
- 【易错点 2】未包裹 act 会导致状态更新未正确应用,产生测试不稳定。
- 【易错点 3】过度依赖快照测试,快照更新频繁且不易审查,维护成本高。