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
相关产品推荐
相关产品推荐

