diff --git a/package.json b/package.json index 33123334..e86faef7 100644 --- a/package.json +++ b/package.json @@ -122,7 +122,7 @@ "vite-plugin-svgr": "^3.2.0" }, "jest": { - "testEnvironment": "jsdom", + "testEnvironment": "./test/environment.ts", "testMatch": [ "/test/**/*-test.[jt]s?(x)" ], diff --git a/test/environment.ts b/test/environment.ts new file mode 100644 index 00000000..5c29e1ea --- /dev/null +++ b/test/environment.ts @@ -0,0 +1,18 @@ +import { TextEncoder } from "util"; +import JSDOMEnvironment_, { + TestEnvironment as TestEnvironment_, +} from "jest-environment-jsdom"; +import { JestEnvironmentConfig, EnvironmentContext } from "@jest/environment"; + +// This is a patched version of jsdom that adds TextEncoder, as a workaround for +// https://github.com/jsdom/jsdom/issues/2524 +// Once that issue is resolved, this custom environment file can be deleted +export default class JSDOMEnvironment extends JSDOMEnvironment_ { + constructor(config: JestEnvironmentConfig, context: EnvironmentContext) { + super(config, context); + this.global.TextEncoder ??= TextEncoder; + } +} + +export const TestEnvironment = + TestEnvironment_ === JSDOMEnvironment_ ? JSDOMEnvironment : TestEnvironment_;