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

React测试报错:TypeError: _reactTestRenderer.default.act is not a function

React 15.4.0 中使用 react-test-renderer.act 报错的解决方法

我是React新手,正尝试在现有React-redux项目中集成单元测试框架,编写了如下测试Cancel按钮的代码:

import React from 'react';
import DependencySystemCreatePage from "../../_components/dependencySys/DependencySystemCreatePage";
import {depSysCreateProps, depSysCreateContext, depSysCreateState} from "./TestConstants";
import { Provider } from "react-redux";
import configureStore from "redux-mock-store";
import renderer from 'react-test-renderer';

const mockStore = configureStore();

test("Test Cancel button", () => {
  let store = mockStore(depSysCreateState);
  store.dispatch = jest.fn();

  let component = renderer.create(
    <Provider store={store}>
      <DependencySystemCreatePage {...depSysCreateProps} />
    </Provider>
  )

  expect(component.toJSON()).toMatchSnapshot();

  renderer.act(() => {
    component.root.findByType('button').props.onClick();
  });
  expect(store.dispatch).toHaveBeenCalledTimes(1);

})

运行后出现如下错误:

TypeError: _reactTestRenderer.default.act is not a function
      24 |   expect(component.toJSON()).toMatchSnapshot();
      25 |
    > 26 |   renderer.act(() => {
         |            ^
      27 |     component.root.findByType('button').props.onClick();
      28 |   });
      29 |   expect(store.dispatch).toHaveBeenCalledTimes(1);

我的react、react-dom、react-test-renderer版本均为15.4.0,jest版本为29.6.4,已确认三者版本一致仍存在该问题,希望得到帮助。


问题原因

renderer.act() 是 React 16.8+ 版本才引入的API,你的React版本是15.4.0,不存在这个方法,因此触发找不到函数的错误。同时Jest 29.x与React 15.x存在兼容性适配问题,也可能放大这类版本不匹配的报错。

解决办法

方法1:升级React版本(推荐)

将React、react-dom、react-test-renderer升级到16.8及以上版本,即可正常使用act()API,同时获得更好的测试支持与新特性。执行以下命令升级:

npm install react@^16.8 react-dom@^16.8 react-test-renderer@^16.8 --save

方法2:适配React 15.x写法,移除act()调用

在React 15.x版本中,不需要用act()包裹事件触发或状态更新操作,直接调用点击函数即可。修改测试代码如下:

// 移除renderer.act()包裹,直接执行点击
component.root.findByType('button').props.onClick();
expect(store.dispatch).toHaveBeenCalledTimes(1);

同时建议降级Jest到与React 15.x兼容的版本(如24.x),避免其他潜在问题:

npm install jest@^24.9.0 --save-dev

内容的提问来源于stack exchange,提问作者Gurkarn Goindi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:53:16