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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:30:46