javascript / expert
Snippet
Dynamische Modul-Cache-Injektion für Isolationstests in Node.js
Node.js verwendet require.cache zum Speichern aufgelöster CommonJS-Module. In Testumgebungen ermöglicht die Manipulation dieses Caches die direkte Injektion von Stubs in den Auflösungsbaum. Die Rückgabe einer Aufräumfunktion verhindert, dass Zustände zwischen verschiedenen Testläufen geteilt werden.
snippet.js
javascript
1
2
3
4
5
6
function injectMockModule(modulePath, mockExports) {const resolvedPath = require.resolve(modulePath);const mockModule = { exports: mockExports, loaded: true, id: resolvedPath };require.cache[resolvedPath] = mockModule;return () => { delete require.cache[resolvedPath]; };}
nodejs
Erklärung
1
const resolvedPath = require.resolve(modulePath);
Ermittelt den absoluten Dateipfad des Zielmoduls als Schlüssel für require.cache.
2
require.cache[resolvedPath] = mockModule;
Überschreibt den gecachten Moduleintrag mit einem benutzerdefinierten synthetischen Objekt.
3
return () => { delete require.cache[resolvedPath]; };
Gibt eine Aufräumfunktion zurück, um das Mock-Objekt nach Abschluss des Tests zu entfernen.