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

升级Jest至v29后出现ReferenceError: TextEncoder is not defined求助

解决Jest 29升级后react-dom/server导入浏览器版本导致的TextEncoder is not defined错误

问题根源

升级Jest到29.x后,模块解析逻辑发生变化,测试环境错误导入了react-dom/server的浏览器版本(而非Node.js版本)。浏览器环境中TextEncoder是全局对象,但Node.js环境需显式引入,因此触发未定义错误。

非Hack解决方案

1. 调整Jest模块扩展名优先级

修改package.json中Jest配置的moduleFileExtensions,将"node"移至最前,让Jest优先查找Node.js专属版本的模块文件:

"jest": {
  // ...其他配置
  "moduleFileExtensions": [
    "node",
    "web.js",
    "js",
    "web.ts",
    "ts",
    "web.tsx",
    "tsx",
    "json",
    "web.jsx",
    "jsx"
  ],
  // ...其他配置
}

react-dom/server通过文件后缀区分环境版本,调整优先级后,Jest会优先匹配Node.js版本的文件。

2. 强制映射到Node.js版本的react-dom/server

在Jest的moduleNameMapper中添加规则,直接指定react-dom/server的Node.js版本路径:

"jest": {
  // ...其他配置
  "moduleNameMapper": {
    "^react-native$": "react-native-web",
    "^.+\\.module\\.(css|sass|scss)$": "identity-obj-proxy",
    "^uuid$": "<rootDir>/node_modules/uuid/dist/umd/uuid.min.js",
    "^react-dom/server$": "<rootDir>/node_modules/react-dom/cjs/react-dom-server.node.js"
  },
  // ...其他配置
}

此方法跳过自动解析,强制使用Node.js版本,适合需要精准控制模块导入的场景。

3. 确保jest-environment-jsdom版本与Jest主版本一致

Jest 29.x要求jest-environment-jsdom版本必须与Jest核心版本匹配,避免环境模拟不一致:

npm install jest-environment-jsdom@29.7.0 --save-dev

方案优势

以上方案均从修正模块导入逻辑出发,而非临时补全局对象,更符合项目长期维护需求,避免后续因环境变化再次触发类似问题。

内容的提问来源于stack exchange,提问作者Lukas Müller

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 12:35:24