-
Notifications
You must be signed in to change notification settings - Fork 46
Expand file tree
/
Copy pathjest.polyfills.js
More file actions
31 lines (24 loc) · 1.39 KB
/
jest.polyfills.js
File metadata and controls
31 lines (24 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
const { TextEncoder, TextDecoder } = require('node:util');
Reflect.set(globalThis, 'TextEncoder', TextEncoder);
Reflect.set(globalThis, 'TextDecoder', TextDecoder);
// Polyfill setImmediate and clearImmediate for undici
// undici uses these Node.js-specific timers internally, but they don't exist in jsdom
const { setImmediate: nodeSetImmediate, clearImmediate: nodeClearImmediate } = require('node:timers');
Reflect.set(globalThis, 'setImmediate', nodeSetImmediate);
Reflect.set(globalThis, 'clearImmediate', nodeClearImmediate);
// Polyfill Web Streams API before importing undici (required in v6+)
const { ReadableStream, WritableStream, TransformStream } = require('node:stream/web');
Reflect.set(globalThis, 'ReadableStream', ReadableStream);
Reflect.set(globalThis, 'WritableStream', WritableStream);
Reflect.set(globalThis, 'TransformStream', TransformStream);
// Polyfill BroadcastChannel for MSW 2.x
const { BroadcastChannel } = require('node:worker_threads');
Reflect.set(globalThis, 'BroadcastChannel', BroadcastChannel);
const { Blob } = require('node:buffer');
const { fetch, Request, Response, Headers, FormData } = require('undici');
Reflect.set(globalThis, 'fetch', fetch);
Reflect.set(globalThis, 'Blob', Blob);
Reflect.set(globalThis, 'Request', Request);
Reflect.set(globalThis, 'Response', Response);
Reflect.set(globalThis, 'Headers', Headers);
Reflect.set(globalThis, 'FormData', FormData);