使用MSW模拟API测试时遇ReferenceError: TextEncoder未定义
解决MSW启动时
ReferenceError: TextEncoder is not defined的方案 针对你遇到的问题,试试以下几个针对性的解决办法:
强制指定Jest的jsdom兼容配置:部分新版jsdom默认未暴露
TextEncoder/TextDecoder,在jest.config.js中添加如下配置:module.exports = { testEnvironment: 'jsdom', testEnvironmentOptions: { customExportConditions: ['node', 'node-addons'] } }确保polyfill绑定到全局对象:调整
setupTests.js中的polyfill代码,直接挂载到全局作用域,避免未生效:
如果是ES模块环境:import { TextEncoder, TextDecoder } from 'util'; globalThis.TextEncoder = TextEncoder; globalThis.TextDecoder = TextDecoder;如果是CommonJS环境:
const { TextEncoder, TextDecoder } = require('util'); global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder;调整MSW初始化顺序:保证polyfill代码在MSW启动代码之前执行,
setupTests.js的执行顺序如下:// 先加载polyfill const { TextEncoder, TextDecoder } = require('util'); global.TextEncoder = TextEncoder; global.TextDecoder = TextDecoder; // 再启动MSW服务器 import { setupServer } from 'msw/node'; const server = setupServer(/* 你的mock配置 */); server.listen();降级MSW版本:若最新版MSW与当前Jest/jsdom版本存在兼容性问题,可尝试降级到MSW v1.x稳定版:
npm install msw@1.3.2
内容的提问来源于stack exchange,提问作者Ali Asghar Gill
相关产品推荐
相关产品推荐

