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

Node v16.13.0环境下Jest运行测试报错AbortController未定义

问题原因

1. Jest沙箱环境与宿主Node环境隔离

Jest运行测试时会创建独立的沙箱环境,不管你用的是jsdom还是node类型的测试环境,都不会完全继承宿主Node的全局变量:

  • 若配置testEnvironment: 'jsdom':Jest默认绑定的jsdom版本低于v16时,没有内置AbortController实现,哪怕宿主Node v16已经支持该API,沙箱内也不会生效。
  • 若配置testEnvironment: 'node':Jest版本低于v27.4.0时,对Node v16新增的全局API继承存在缺陷,会漏掉AbortController等全局变量。

2. Jest相关依赖版本不匹配

升级所有依赖时可能存在锁文件缓存,导致jest-environment-jsdom、jest-environment-node等子依赖版本和Jest主包版本不一致,触发兼容问题。

3. 旧polyfill配置残留

之前引入AbortController polyfill时,大概率在Jest的setupFiles/setupFilesAfterEnv配置中写过全局注入逻辑,移除polyfill后如果没有删除对应代码,会导致全局AbortController被赋值为undefined。


解决方案

  • 升级所有Jest相关依赖到v28及以上版本,确保jest、jest-environment-jsdom/jest-environment-node、ts-jest版本完全对齐,删除node_modules和锁文件后重新安装依赖。
  • 若暂时无法升级Jest版本,可在Jest的全局配置文件中手动注入Node内置的AbortController:
    在setupFilesAfterEnv对应的配置文件中添加如下代码:
global.AbortController = AbortController;
global.AbortSignal = AbortSignal;
  • 检查Jest配置中所有全局注入逻辑,删除和AbortController polyfill相关的残留代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:15:02