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

React.createElement无效类型警告:Jest+Enzyme测试自定义按钮问题

解决React.createElement警告的问题

我仔细看了你的代码和警告信息,这个"类型无效得到undefined"的警告,大概率是下面两个原因之一,咱们一步步来排查:

1. 测试环境中NavigationEvents组件未被正确处理

你的Dashboard组件里用了<NavigationEvents>,但在Jest/Enzyme的测试环境中,这个组件并没有被默认提供完整的实现;如果你的react-navigation版本是v5+,NavigationEvents甚至已经被废弃了。当React尝试渲染一个undefined的组件时,就会触发这个警告。

解决办法:在你的测试文件最顶部添加一段mock代码,把NavigationEvents伪装成一个空组件:

jest.mock('react-navigation', () => ({
  ...jest.requireActual('react-navigation'),
  NavigationEvents: () => null, // 只需要让它不触发渲染警告就行
}));

2. DashboardButton的导入方式存在隐患

我注意到你在Dashboard组件里用的是命名导入import {DashboardButton} from '../layout/DashboardButton';,但你的DashboardButton文件里,默认导出的是经过redux connect包裹的组件,命名导出的是纯函数组件。

虽然这不是当前警告的直接原因,但这个纯组件并没有被连接到redux store,所以它无法获取enabledLongPress这个props(你在DashboardButton里用到了这个属性)。测试时可能因为逻辑不依赖它所以通过了,但实际运行时会出现props.enabledLongPress为undefined的情况。

解决办法:把Dashboard里的导入改成默认导入:

// 替换原来的命名导入
import DashboardButton from '../layout/DashboardButton';

验证

先添加NavigationEvents的mock,运行测试,警告应该就消失了。再修改DashboardButton的导入方式,确保组件能正常获取redux中的状态。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 09:23:13