diff --git a/jest.config.js b/jest.config.js index 877c5da4..e4a2fe6c 100644 --- a/jest.config.js +++ b/jest.config.js @@ -14,6 +14,7 @@ const customJestConfig = { isows: "/node_modules/isows/_cjs/index.js", // https://github.com/wagmi-dev/viem/issues/1329 tinykeys: "/node_modules/tinykeys/dist/tinykeys.js", }, + setupFiles: ["/jest.polyfills.js"], setupFilesAfterEnv: ["/jest.setup.js"], testEnvironment: "jest-environment-jsdom", testPathIgnorePatterns: [ diff --git a/jest.polyfills.js b/jest.polyfills.js new file mode 100644 index 00000000..c76513f3 --- /dev/null +++ b/jest.polyfills.js @@ -0,0 +1,28 @@ +// https://mswjs.io/docs/faq/#referenceerror-fetch-is-not-defined-in-nodejs +// https://mswjs.io/docs/faq/#requestresponsetextencoder-is-not-defined-jest + +const { ReadableStream } = require("stream/web"); +const { clearImmediate, setImmediate } = require("timers"); +const { TextDecoder, TextEncoder } = require("util"); + +Object.defineProperties(global, { + ReadableStream: { value: ReadableStream }, + TextDecoder: { value: TextDecoder }, + TextEncoder: { value: TextEncoder }, + clearImmediate: { value: clearImmediate }, + setImmediate: { value: setImmediate }, +}); + +const { Blob, File } = require("buffer"); +const { fetch, FormData, Headers, Request, Response } = require("undici"); + +Object.defineProperties(global, { + Blob: { value: Blob }, + File: { value: File }, + FormData: { value: FormData }, + Headers: { value: Headers }, + Request: { value: Request }, + ResizeObserver: { value: require("resize-observer-polyfill") }, + Response: { value: Response }, + fetch: { value: fetch, writable: true }, +}); diff --git a/jest.setup.js b/jest.setup.js index d788b5b9..ee144735 100644 --- a/jest.setup.js +++ b/jest.setup.js @@ -1,9 +1,4 @@ -import "@testing-library/jest-dom/extend-expect"; - -global.ResizeObserver = require("resize-observer-polyfill"); - -// eslint-disable-next-line @typescript-eslint/no-var-requires -global.TextEncoder = require("util").TextEncoder; +import "@testing-library/jest-dom"; // suppress zustand deprecation notice to clear out logs global.console.warn = (...args) => diff --git a/package-lock.json b/package-lock.json index a60eddc2..ebee3eda 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,6 +69,7 @@ "react-dom": "^18.2.0", "tailwindcss": "^3.3.6", "tinykeys": "^2.1.0", + "undici": "^6.0.1", "viem": "^1.19.13", "wagmi": "^1.4.10", "zod": "^3.22.4", @@ -3071,6 +3072,14 @@ "shx": "^0.3.4" } }, + "node_modules/@fastify/busboy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.1.0.tgz", + "integrity": "sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA==", + "engines": { + "node": ">=14" + } + }, "node_modules/@fastify/deepmerge": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/@fastify/deepmerge/-/deepmerge-1.3.0.tgz", @@ -22800,6 +22809,17 @@ "resolved": "https://registry.npmjs.org/uncrypto/-/uncrypto-0.1.3.tgz", "integrity": "sha512-Ql87qFHB3s/De2ClA9e0gsnS6zXG27SkTiSJwjCc9MebbfapQfuPzumMIUMi38ezPZVNFcHI9sUIepeQfw8J8Q==" }, + "node_modules/undici": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/undici/-/undici-6.0.1.tgz", + "integrity": "sha512-eZFYQLeS9BiXpsU0cuFhCwfeda2MnC48EVmmOz/eCjsTgmyTdaHdVsPSC/kwC2GtW2e0uH0HIPbadf3/bRWSxw==", + "dependencies": { + "@fastify/busboy": "^2.0.0" + }, + "engines": { + "node": ">=18.0" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", diff --git a/package.json b/package.json index 7e97fdf0..1b90c02a 100644 --- a/package.json +++ b/package.json @@ -74,6 +74,7 @@ "react-dom": "^18.2.0", "tailwindcss": "^3.3.6", "tinykeys": "^2.1.0", + "undici": "^6.0.1", "viem": "^1.19.13", "wagmi": "^1.4.10", "zod": "^3.22.4",