React组件Jest测试报错:TypeError: (0 , _reactRedux.connect)不是函数
解决Jest测试中
TypeError: (0 , _reactRedux.connect) is not a function的问题 结合你的技术栈版本和报错信息,核心问题大概率出在依赖兼容性和测试环境配置上,我来一步步帮你排查解决:
1. 优先修复react-redux版本兼容性
你使用的React 0.14.8只适配react-redux 4.x系列(比如^4.4.9)。如果项目里装了5.x及以上版本的react-redux,必然会出现不兼容——因为react-redux 5.x开始仅支持React 15.0+,API和导出逻辑都和旧版React不匹配,直接导致connect不是函数的报错。
执行以下命令调整版本:
# 卸载现有不兼容的react-redux npm uninstall react-redux # 安装适配React 0.14的版本 npm install react-redux@^4.4.9 --save
2. 确认connect的导入方式是否正确
检查你的组件或测试文件中,connect的导入语法是否正确:
// 正确的命名导入(react-redux 4.x中connect是命名导出) import { connect } from 'react-redux';
避免错误的默认导入(比如import connect from 'react-redux'),这会导致获取到的不是预期的函数。
3. 完善Jest与Babel的配置适配
因为你用的是Webpack+Babel+旧版React,需要确保Jest能正确转译代码:
检查
.babelrc配置,确保包含必要的预设:{ "presets": ["react", "es2015"] }(
react预设处理JSX语法,es2015转译ES6代码适配Node 5.6的环境)在
package.json中添加Jest配置,处理模块解析和Enzyme初始化:"jest": { "moduleNameMapper": { // 如果Webpack有别名配置,这里要同步映射,比如: "^components/(.*)$": "<rootDir>/src/components/$1" }, "setupTestFrameworkScriptFile": "<rootDir>/src/setupTests.js" }创建
src/setupTests.js初始化Enzyme适配器:import { configure } from 'enzyme'; import Adapter from 'enzyme-adapter-react-14'; configure({ adapter: new Adapter() });
4. 清除Jest缓存并重新测试
Jest会缓存模块文件,旧缓存可能导致奇怪的报错,运行以下命令清除缓存后重试:
jest --clearCache npm test
5. 排查Webpack与Jest的模块解析差异
如果你的Webpack配置里有resolve.alias,一定要在Jest的moduleNameMapper中同步配置,否则Jest找不到正确的模块路径,也会间接导致导入的connect为undefined,触发不是函数的报错。
内容的提问来源于stack exchange,提问作者Sisi Qin
相关产品推荐
相关产品推荐

