Node 20+Jest环境下使用msw出现ReferenceError: Response未定义
解决MSW + Jest中
ReferenceError: Response is not defined的问题 原因
Node.js 20原生支持fetch,但Jest测试环境默认不会将Response、Request这类Web API挂载到global对象,而MSW v2在Node环境下依赖这些全局可用的API。你之前仅polyfill fetch的操作不完整,无法覆盖所有依赖项。
解决方法
方法1:手动挂载Web API到全局
修改setupTests.js,在文件顶部添加以下代码,把Node内置的Web API绑定到global:
import { fetch, Headers, Request, Response } from 'node-fetch'; Object.assign(global, { fetch, Headers, Request, Response, });
如果项目未安装node-fetch,先执行安装命令:
npm install node-fetch --save-dev
方法2:配置Jest自动暴露Web API
在jest.config.json(或jest.config.js)中添加testEnvironmentOptions配置:
{ "testEnvironment": "node", "testEnvironmentOptions": { "customExportConditions": ["node", "node-addons"] } }
该配置会让Jest自动使用Node原生的Web API实现,无需手动polyfill。
方法3:确认MSW导入路径(必查)
确保server.js中导入的是Node环境的MSW包,你当前的导入是正确的:
import { setupServer } from "msw/node";
若误导入浏览器端的msw包,也会触发类似环境依赖报错。
验证
修改完成后重新运行测试,ReferenceError: Response is not defined错误应会消除。
内容的提问来源于stack exchange,提问作者PubSub
相关产品推荐
相关产品推荐

