React Native升级至0.72.4后Jest快照测试报错求助
解决React Native 0.72.4升级后React Redux组件Jest快照测试报错问题
核心错误TypeError: require(...).unstable_batchedUpdates is not a function源于React 18+与React Native测试环境的批量更新API适配问题,结合你的环境版本,可按以下步骤排查修复:
1. 确认Jest测试环境配置
检查jest.config.js或package.json中的Jest配置,确保测试环境设置为react-native,自动加载React Native的测试适配层:
// jest.config.js module.exports = { testEnvironment: 'react-native', // 其他配置项... };
2. 全局模拟unstable_batchedUpdates
若配置无误仍报错,在Jest初始化文件(如setupFilesAfterEnv指定的文件)中添加全局模拟:
// jest.setup.js import React from 'react'; // 模拟React批量更新API,适配测试环境 React.unstable_batchedUpdates = (callback) => callback();
并在Jest配置中指定该初始化文件:
module.exports = { setupFilesAfterEnv: ['./jest.setup.js'], // 其他配置项... };
3. 规范Redux组件测试的渲染方式
测试时必须用Redux的Provider包裹待测试组件,使用@testing-library/react-native的render方法而非直接调用react-test-renderer的create:
// ContractDetail.test.js import { render } from '@testing-library/react-native'; import { Provider } from 'react-redux'; import ContractDetail from '../ContractDetail'; import store from '../storeTest'; test('ContractDetail 快照匹配', () => { const { toJSON } = render( <Provider store={store}> <ContractDetail /> </Provider> ); expect(toJSON()).toMatchSnapshot(); });
4. 对齐测试依赖版本
确保测试依赖版本与React Native 0.72.4兼容:
react-test-renderer版本必须与React版本一致(18.2.0)jest建议使用29.x版本@testing-library/react-native建议使用12.x及以上版本
示例package.json的devDependencies片段:
"devDependencies": { "@testing-library/react-native": "^12.1.2", "jest": "^29.6.3", "react-test-renderer": "18.2.0", "metro-react-native-babel-preset": "0.76.8" }
5. 清除Jest缓存
运行以下命令清除缓存,避免旧模块缓存引发的异常:
npx jest --clearCache
内容的提问来源于stack exchange,提问作者Zijian
相关产品推荐
相关产品推荐

