From 3307ed642c9b2a36b25bdedba43d0676d57fadcf Mon Sep 17 00:00:00 2001 From: Kyle June Date: Sat, 26 Sep 2026 22:22:56 -0400 Subject: [PATCH] fix(testing): use document browser storage --- src/utils/global-jsdom.test.ts | 20 ++++++++++++++++++++ src/utils/global-jsdom.ts | 11 +++++++++++ 2 files changed, 31 insertions(+) diff --git a/src/utils/global-jsdom.test.ts b/src/utils/global-jsdom.test.ts index edbe239..4f007fb 100644 --- a/src/utils/global-jsdom.test.ts +++ b/src/utils/global-jsdom.test.ts @@ -4,6 +4,26 @@ import { assert, assertEquals, assertInstanceOf } from "@std/assert"; import { describe, it } from "@std/testing/bdd"; describe("global-jsdom", () => { + it("uses the document's storage for browser globals", () => { + assertEquals(globalThis.localStorage, document.defaultView!.localStorage); + assertEquals( + globalThis.sessionStorage, + document.defaultView!.sessionStorage, + ); + localStorage.setItem("browser-storage-test", "local"); + sessionStorage.setItem("browser-storage-test", "session"); + assertEquals( + document.defaultView!.localStorage.getItem("browser-storage-test"), + "local", + ); + assertEquals( + document.defaultView!.sessionStorage.getItem("browser-storage-test"), + "session", + ); + localStorage.removeItem("browser-storage-test"); + sessionStorage.removeItem("browser-storage-test"); + }); + it("defines ResizeObserver, which JSDOM omits", () => { assert( "ResizeObserver" in globalThis, diff --git a/src/utils/global-jsdom.ts b/src/utils/global-jsdom.ts index d95a7e7..6d2bfc2 100644 --- a/src/utils/global-jsdom.ts +++ b/src/utils/global-jsdom.ts @@ -52,6 +52,17 @@ globalJsdom(undefined, { pretendToBeVisual: true, }); +Object.defineProperties(globalThis, { + localStorage: { + configurable: true, + get: () => document.defaultView!.localStorage, + }, + sessionStorage: { + configurable: true, + get: () => document.defaultView!.sessionStorage, + }, +}); + class NoopResizeObserver implements ResizeObserver { observe(): void {} unobserve(): void {}