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

Jest+Enzyme测试Styled Component时报React.createElement类型无效警告

问题产生原因
  • 导入路径不匹配:Abc.jsx 中导入样式的语句为 import * as Styled from './Abc.css',但实际样式文件的完整名称是 Abc.css.jsx,二者路径后缀不一致。
  • Jest 配置触发样式代理:Jest 配置中设置了所有以 .css、.less 等样式后缀结尾的文件,统一使用 identity-obj-proxy 代理。当你按 ./Abc.css 路径导入时,Jest 会判定这是普通 CSS 文件,直接返回代理空对象,不会去查找真实的 Abc.css.jsx 文件,导致调用的 Styled.Title 为 undefined,触发 React 创建元素时的类型无效报错。
  • 语法细节问题:Abc.jsx 中样式组件的关闭标签多了空格,</ Styled.Title> 的写法不符合语法规范,也可能导致解析异常。
修复方案
  1. 修正 Abc.jsx 中的样式导入路径,两种方案二选一即可:
    • 方案A:直接写全样式文件的完整后缀,将导入语句改为 import * as Styled from './Abc.css.jsx'
    • 方案B:如果不想每次写全 .css.jsx 后缀,可在构建工具(Webpack/Vite等)的 resolve.extensions 配置中添加 .css.jsx 后缀,同时将 Jest 配置中 JS/JSX 转译的匹配规则调整为可识别该后缀,再将导入语句改为 import * as Styled from './Abc'(省略所有后缀,自动匹配同名的 .css.jsx 文件)
  2. 修正关闭标签的语法错误:将 <Styled.Title>ABC</ Styled.Title> 改为 <Styled.Title>ABC</Styled.Title>
  3. 确认 Jest 配置的样式匹配规则正确,默认的 "\\.(css|less|scss|sass)$": "identity-obj-proxy" 已经是匹配纯样式后缀结尾的文件,只要导入路径不以纯样式后缀结尾,就不会被拦截,会走正常的 JSX 转译逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 20:09:02