Jest 在节点 v16.13.0 中找不到 AbortController

Jest can't find AbortController in node v16.13.0

我正在使用 Jest 运行 我的测试。从 v12 升级到 Node v16.13.0(LTS 版本)后,出现以下错误:

ReferenceError: AbortController is not defined

而 运行使用 Node 手动编写代码工作正常。

在升级到 v16 的过程中,我将所有软件包都升级到了最新版本。我一直在为模拟 AbortController 使用 polyfill,因为我在升级之前使用的是 Node v12。 Node v16 带有自己的 AbortController,因此我删除了 polyfill。我正在使用 TypeScript 4.4.4,以防相关(这不是 TypeScript 错误)。

polyfill 没有出现这个错误。

似乎 Jest 运行s 与我手动 运行 我的应用程序与 Node.

相比使用的环境不同

我尝试了以下方法:

我已经处理这个问题好几个小时了,似乎互联网上没有人遇到过这个问题。有谁知道发生了什么事吗?

经过更多挖掘,我 'fixed' 这个问题。只需从 package.json.

删除 "testEnvironment": "node"(在 "jest": {...} 内)

我偶然发现了设置 Jest 测试环境的选项 (https://jestjs.io/docs/configuration#testenvironment-string),我注意到我的 package.json 已经包含该设置(在 "jest": {...} 下)并且它被设置为: "testEnvironment": "node"。然而,根据文档,这是默认设置,所以我什么都没考虑。

几小时后,在绝望的情况下,我决定将其删除...瞧,它解决了问题。

显然将 "testEnvironment" 配置设置为与其默认配置相同的东西会改变 Jest 的 运行ning 环境,这对我来说非常违反直觉和令人困惑。

编辑:这是由 Create React App 引起的。我比较了一个空的 repo 和只安装了 jest 的 CRA repo,后者是 jest 的。将测试命令更改为 jest 并添加上面的配置会触发该问题。如果您使用默认的 react-scripts test 命令,CRA 将不会 运行 测试并给您一个很大的红色错误,表明它们不支持 "testEnvironment" 设置。