You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 16:57:18