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

为什么在Jest中运行测试时出现TextEncoder is not defined报错?

问题原因

TextEncoder和TextDecoder属于Web API规范,默认未被旧版jsdom注入到模拟的浏览器全局环境中。虽然Node.js v11及以上版本已经内置了这两个API,但低版本jsdom不会主动将其绑定到测试运行的全局对象或者模拟的window对象上,因此会触发未定义的报错。

可行解决方案
  • 方案1:将jsdom升级到v16及以上版本,该版本开始已经默认内置了对TextEncoder、TextDecoder的全局挂载,升级后无需额外配置即可正常使用
  • 方案2:如果受项目限制无法升级jsdom版本,可以在测试初始化代码中手动挂载全局API:
// Node.js v11及以上版本可用
const { TextEncoder, TextDecoder } = require('util');
global.TextEncoder = TextEncoder;
global.TextDecoder = TextDecoder;
  • 方案3:如果使用Jest等测试框架搭配jsdom,可以在框架的全局初始化配置文件(比如Jest的setupFilesAfterEnv指定的文件)中加入上述手动挂载的代码即可全局生效

若你使用的Node.js版本低于v11,需要先安装text-encoding依赖包后再进行挂载:

const { TextEncoder, TextDecoder } = require('text-encoding');
global.TextEncoder = TextEncoder;
global.TextDecoder = TextDecoder;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 02:18:00