/** * Necessary for MSW * * @note The block below contains polyfills for Node.js globals * required for Jest to function when running JSDOM tests. * These HAVE to be require's and HAVE to be in this exact * order, since "undici" depends on the "TextEncoder" global API. * * Consider migrating to a more modern test runner if * you don't want to deal with this. */ const { TextDecoder, TextEncoder } = require("node:util"); const { ReadableStream } = require("node:stream/web"); Object.defineProperties(globalThis, { TextDecoder: { value: TextDecoder }, TextEncoder: { value: TextEncoder }, ReadableStream: { value: ReadableStream }, }); const { Blob, File } = require("node:buffer"); const { fetch, Headers, FormData, Request, Response } = require("undici"); Object.defineProperties(globalThis, { fetch: { value: fetch, writable: true }, Blob: { value: Blob }, File: { value: File }, Headers: { value: Headers }, FormData: { value: FormData }, Request: { value: Request }, Response: { value: Response }, matchMedia: { value: (query) => ({ matches: false, media: query, onchange: null, addListener: jest.fn(), removeListener: jest.fn(), addEventListener: jest.fn(), removeEventListener: jest.fn(), dispatchEvent: jest.fn(), }), }, });