为什么我在 Jest 中得到 "TextEncoder is not defined"?

Why am I getting "TextEncoder is not defined" in Jest?

在测试使用 TextEncoder 或 TextDecoder 的函数时,我得到:

ReferenceError: TextEncoder is not defined
ReferenceError: TextDecoder is not defined

我正在使用 jsdom,为什么它不起作用?

虽然它应该与 jsdom 捆绑在一起,但它没有与 jsdom 16 捆绑在一起。因此您可以像这样进行 polyfill:

import { TextEncoder, TextDecoder } from 'util'
global.TextEncoder = TextEncoder
global.TextDecoder = TextDecoder

确保你的 whatwg-url 包至少有 ^10.0.0 版本

我也收到了这个错误,我正在使用此处文档中概述的标准 Next.js jest 和 React 测试库测试设置:https://nextjs.org/docs/testing#setting-up-jest-with-the-rust-compiler

特别是,它使用 testEnvironment: 'jest-environment-jsdom' jest.config.js 配置文件中的测试环境。

不幸的是,在我的后端 api 路线之一(快速路线)中导入 jsdom 破坏了我的测试,给我 TextEncoder is not defined 错误。

我可以通过将以下 添加到包含损坏测试的文件顶部来修复它 :

/**
 * @jest-environment node
 */
// my-broken-node-only-test.js

Read more about this technique via the jest docs.

Lastly, the following issue comment by Jest maintainer Simen helped clarify what was happening in my case: https://github.com/jsdom/jsdom/issues/2524#issuecomment-902027138