react单元测试核心是jest+@testing-library/react,专注用户行为与ui输出;安装依赖后,用render挂载、screen查询、userevent交互、expect断言;异步需waitfor和mock;避免测内部状态、过度依赖结构、盲目追求覆盖率。

在 React 组件中写单元测试,核心是用 Jest 作为测试运行器 + @testing-library/react 渲染和交互组件,不依赖实现细节,专注用户行为和输出。
安装必要依赖
确保项目已配置 Jest(Create React App 默认内置),再安装测试库:
npm install --save-dev @testing-library/react @testing-library/jest-dom- 推荐加
@testing-library/user-event替代旧的fireEvent,更贴近真实用户操作
基础测试写法:渲染、查询、断言
以一个简单按钮组件为例:
function Counter() {
const [count, setCount] = useState(0);
return (
<div>
<span>{count}</span>
<button onclick="{()"> setCount(c => c + 1)}>+1</button>
</div>
);
}
对应测试文件 Counter.test.js:
用于在React Native或Expo移动应用(iOS/Android)中添加生物识别认证——集成react-native-auth0 SDK与原生深度...
- 用
render挂载组件到虚拟 DOM - 用
screen.getByText/getByRole等查询元素(避免用 class 或 data-testid 优先) - 用
userEvent.click触发交互 - 用
expect(...).toBeInTheDocument()或.toHaveTextContent()断言结果
测试异步逻辑和副作用
遇到 useEffect、API 调用或 Promise 时:
- 用
await waitFor(() => expect(...))等待异步更新完成 - 用
jest.mock('path/to/module')模拟外部依赖(如fetch) - 对自定义 Hook,可单独抽离测试,或在组件测试中覆盖其使用场景
避免常见误区
不测内部状态变量(如直接读 count),而测它如何影响 UI;不深挖组件树结构,用语义化查询(getByRole('button', {name: /+1/}));不为覆盖率盲目补测试,聚焦用户可见行为和关键分支(如加载中、错误态、空数据)。
不复杂但容易忽略:每次测试后自动清理(render 已内置 cleanup),无需手动调用 unmount。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










