React Native Testing Library/Jest测试报错Cannot read property 'TouchableOpacity'
报错原因
你对react-native-gesture-handler的jest mock配置存在两处问题:
- mock返回的对象中没有导出业务代码用到的
TouchableOpacity组件,导致引入时找不到对应属性 - 箭头函数直接返回对象未加括号包裹,大括号会被识别为函数体,最终mock返回
undefined,这也是触发"Cannot read property 'TouchableOpacity' of undefined"的直接原因
解决方法
修改Card.test.js中的react-native-gesture-handler mock配置,补充导出TouchableOpacity组件,直接模拟为React Native自带的View即可满足测试需求:
jest.mock('react-native-gesture-handler', () => { const React = require('react'); const { View } = require('react-native'); return { TouchableOpacity: (props) => <View {...props} />, dropGestureHandler: jest.fn() }; });
如果你的项目有多个测试文件都用到了react-native-gesture-handler的组件,可以把这段mock配置放到jest全局setup文件中,避免每个测试文件重复编写。
修改完成后重新运行测试即可正常通过,不需要改动业务代码中的TouchableOpacity逻辑。
内容的提问来源于stack exchange,提问作者Martin Cavanagh
相关产品推荐
相关产品推荐

