SuperAPI AI 工具集

react-native-testing-library

测试与质量

查看项目

更新于 10-15 23:33

技能介绍

用途:React Native Testing Library(RNTL)用于 React Native 组件与屏幕的组件级测试,主张从用户视角验证行为,而非依赖实现细节,从而让测试在重构后依然稳定。

主要能力:提供 render、screen、fireEvent、waitFor 等 API;支持按无障碍角色与标签查询(getByRole、getByLabelText)、按文本查询(getByText),以及作为兜底的 getByTestId;可用 fireEvent.press、fireEvent.changeText、fireEvent.scroll 模拟按压、输入与滚动;用 findBy 查询或 waitFor 处理异步 UI 更新;可配合 jest-native 匹配器(如 toBeOnTheScreen、toHaveTextContent)。

使用方式:安装后从 @testing-library/react-native 导入 render、screen、fireEvent、waitFor 等。查询优先使用无障碍方式,交互使用 fireEvent,异步更新使用 findBy 或 waitFor,避免 setTimeout。原生模块可在 mocks/ 目录创建手动 mock 并用 jest.mock() 启用,测试间用 jest.clearAllMocks() 重置。使用 Redux、主题等 Provider 时,建议封装自定义 render 函数统一注入。测试导航可 mock @react-navigation/native,复杂流程可考虑 createNavigationContainerRef 做集成测试。平台相关 UI 可 mock Platform.OS 分别覆盖 iOS 与 Android。

适用场景:组件与屏幕测试、用户交互模拟、无障碍特性与标签验证、异步加载与错误状态测试、需要抗重构的 UI 测试。

限制:不适用于跨应用端到端测试(应使用 Detox 或 Maestro)、不直接测试原生模块(应使用原生测试框架)、不做性能基准测试。若交互元素未设置 accessibilityLabel 或 accessible={true},无障碍查询会失败。部分原生模块需要特定 mock 实现(如 react-native-reanimated 需要 babel 插件)。异步渲染可能产生竞态,应始终使用 findBy 或 waitFor。官方文档见 https://callstack.github.io/react-native-testing-library/ 。