javascript / expert
Snippet
Dynamisches Objekt-Mocking mit Eigenschafts-Deskriptoren für Unittests von Next.js-Headern
Diese Technik nutzt JavaScript-Property-Deskriptoren auf niedriger Ebene (Object.getOwnPropertyDescriptor und Object.defineProperty), um den globalen Headers-Konstruktor von Next.js-Serverlaufzeiten während Unittests sicher zu isolieren und zu mocken. Sie gibt eine Cleanup-Funktion zurück, die den ursprünglichen Zustand wiederherstellt.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
export function mockNextHeaders(headerMap) {const originalDescriptor = Object.getOwnPropertyDescriptor(globalThis, 'Headers');const MockedHeaders = class extends Headers {constructor() {super();Object.entries(headerMap).forEach(([key, val]) => this.set(key, val));}};Object.defineProperty(globalThis, 'Headers', {value: MockedHeaders,configurable: true,writable: true});return () => {if (originalDescriptor) {Object.defineProperty(globalThis, 'Headers', originalDescriptor);} else {delete globalThis.Headers;}};}
nextjs
Erklärung
1
const originalDescriptor = Object.getOwnPropertyDescriptor(globalThis, 'Headers');
Erfasst die exakten Property-Deskriptor-Metadaten des globalen Headers-Objekts vor jeder Änderung.
2
Object.defineProperty(globalThis, 'Headers', { value: MockedHeaders, configurable: true, writable: true });
Überschreibt den globalen Scope mit der benutzerdefinierten MockedHeaders-Implementierung unter Verwendung präziser Konfigurations-Flags.
3
return () => { ... };
Gibt eine Teardown-Funktion zurück, die den ursprünglichen globalen Property-Deskriptor wiederherstellt, um Test-Seiteneffekte zu vermeiden.