56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
// Setup happy-dom + wrapper render pour les tests de composants Preact
|
|
|
|
import { Window } from "happy-dom";
|
|
|
|
let _window: Window | null = null;
|
|
|
|
/**
|
|
* Initialise un environnement DOM virtuel via happy-dom.
|
|
* À appeler avant de rendre des composants Preact dans les tests.
|
|
*/
|
|
export function setupDOM(): void {
|
|
_window = new Window({ url: "http://localhost" });
|
|
|
|
// Expose les globals DOM nécessaires à Preact
|
|
const globals = _window as unknown as Record<string, unknown>;
|
|
const target = globalThis as unknown as Record<string, unknown>;
|
|
|
|
for (
|
|
const key of [
|
|
"document",
|
|
"navigator",
|
|
"location",
|
|
"HTMLElement",
|
|
"HTMLInputElement",
|
|
"HTMLTextAreaElement",
|
|
"HTMLSelectElement",
|
|
"Event",
|
|
"CustomEvent",
|
|
"KeyboardEvent",
|
|
"MouseEvent",
|
|
"InputEvent",
|
|
"MutationObserver",
|
|
"requestAnimationFrame",
|
|
"cancelAnimationFrame",
|
|
]
|
|
) {
|
|
target[key] = globals[key];
|
|
}
|
|
|
|
target["window"] = _window;
|
|
}
|
|
|
|
/**
|
|
* Nettoie l'environnement DOM.
|
|
* À appeler dans un afterEach ou à la fin d'un test.
|
|
*/
|
|
export function cleanupDOM(): void {
|
|
if (_window) {
|
|
const doc = _window.document;
|
|
doc.body.innerHTML = "";
|
|
doc.head.innerHTML = "";
|
|
_window.close();
|
|
_window = null;
|
|
}
|
|
}
|