在React Native中运行UI测试时Jest与React Navigation报错
React Native Jest UI测试导航模块报错解决方案
根据你提供的配置和报错情况,问题出在仅mock了@react-navigation/native-stack模块,但未提供具体的导航组件实现——Jest默认的空mock会导致createNativeStackNavigator()返回undefined,进而读取Navigator/Screen时抛出错误。
以下是针对性修复步骤:
- 完善
/jest/setup.js的mock逻辑,给导航模块提供完整的mock实现:
// 先mock @react-navigation/native(如果用到NavigationContainer) jest.mock('@react-navigation/native', () => ({ NavigationContainer: ({ children }) => children, useNavigation: () => ({ navigate: jest.fn(), goBack: jest.fn() }) })); // 再完善native-stack的mock jest.mock('@react-navigation/native-stack', () => { const actual = jest.requireActual('@react-navigation/native-stack'); return { ...actual, createNativeStackNavigator: () => ({ Navigator: 'NativeStackNavigator', Screen: 'NativeStackScreen' }), // 如果用到了createScreenOptions等其他API,也需要按需mock createScreenOptions: jest.fn() }; });
- 验证
transformIgnorePatterns配置是否正确(你当前的配置没问题,但如果后续有其他未转译的依赖,可补充到括号内):
"transformIgnorePatterns": [ "node_modules/(?!((jest-)?react-native|react-navigation|@react-navigation/.*|@react-native-community/.*))" ]
- 清除Jest缓存,避免旧mock残留:
npx jest --clearCache
如果仍有报错,检查测试文件中是否用到了其他未被mock的导航相关API,按需补充mock逻辑即可。
内容的提问来源于stack exchange,提问作者RahulSalvikar
相关产品推荐
相关产品推荐

