升级Axios至v1.3.1后所有测试报错:ReferenceError: TextEncoder is not defined
解决Axios v1.3.1升级后Jest测试报错
TextEncoder is not defined的问题 方案1:切换Jest测试环境为jsdom
在项目的jest.config.js(或jest.config.ts)里,把测试环境改成jsdom:
module.exports = { testEnvironment: 'jsdom', // 其他原有配置... };
如果是Create React App项目,不用改全局配置,直接在每个测试文件顶部加一行注释:
/** * @jest-environment jsdom */
方案2:在Jest初始化文件中注入TextEncoder/TextDecoder
要是不想切换测试环境,就修改你的Jest setup文件(比如src/setupTests.js),替换成这段代码:
import { TextEncoder, TextDecoder } from 'util'; global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder;
同时确保这个setup文件在Jest配置里被正确加载:
// jest.config.js module.exports = { setupFilesAfterEnv: ['./src/setupTests.js'], // 其他配置... };
问题根源
Axios从v1.3.x版本开始,内部代码用到了浏览器环境的TextEncoder和TextDecoderAPI,但Jest默认的node测试环境并没有提供这两个API。jsdom环境会模拟浏览器的全局对象,自带这些API;如果坚持用node环境,就需要手动从Node.js的util模块引入并挂载到全局。
你之前试的方案无效,大概率是因为代码执行时机不对——这段注入代码必须在Axios被导入前执行,所以一定要放在Jest的setup文件里,不能写在测试文件或者业务代码里。
内容的提问来源于stack exchange,提问作者Over Martinez
相关产品推荐
相关产品推荐

