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

Jest测试中无法访问Node.js内置fetch函数的问题

Node.js 18内置fetch在Jest中报错“fetch is not defined”的解决方法

问题场景

我有一段使用Node.js 18.x内置全局fetch的函数,无需额外导入模块:

export async function loginNextAuth(displayName, password) {
    const response = await fetch('/api/auth/callback/credentials')
}

这段代码在常规运行和Playwright测试中都能正常工作,但在Jest测试里却抛出ReferenceError: fetch is not defined错误。检查后发现,Jest环境的process.version和开发环境一致为v18.12.1,但global和globalThis对象中都没有fetch属性。

解决方法

1. 升级Jest到29.x及以上版本

Jest 29.x开始默认支持Node.js 18的全局fetch API,直接升级Jest版本就能解决这个问题。

2. 手动在Jest中挂载全局fetch

如果暂时无法升级Jest,可以通过配置文件手动把fetch挂载到全局:

  • 创建jest.setup.js文件:
// 直接使用Node内置的fetch
globalThis.fetch = fetch;

// 若需要更完整的测试模拟,也可以安装node-fetch包后挂载
// const fetch = require('node-fetch');
// globalThis.fetch = fetch;
  • 在jest.config.js中配置这个setup文件:
module.exports = {
  // 其他配置项...
  setupFilesAfterEnv: ['./jest.setup.js'],
};

3. 确认Jest环境配置

确保你的Jest配置中使用的是默认的jest-environment-node环境,并且该依赖包版本足够新,能适配Node 18的全局API。如果之前修改过环境配置,改回默认即可。

原因说明

早期版本的Jest(如28及以下)即使运行在Node 18环境中,默认也没有启用对Node内置fetch的支持,需要通过升级或手动配置来让Jest识别这个全局API。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 19:15:52