import "@testing-library/jest-dom/vitest"; import { vi } from "vitest"; // jsdom doesn't provide ResizeObserver; stub it so components that rely on it // (e.g. input-otp) can render in tests. if (typeof globalThis.ResizeObserver === "undefined") { globalThis.ResizeObserver = class ResizeObserver { observe() {} unobserve() {} disconnect() {} } as unknown as typeof ResizeObserver; } // jsdom 29 / Node.js 22+ may not provide a proper Web Storage API. // Create a proper localStorage mock if methods are missing. if ( typeof globalThis.localStorage === "undefined" || typeof globalThis.localStorage.getItem !== "function" ) { const store: Record = {}; const localStorageMock = { getItem: vi.fn((key: string) => store[key] ?? null), setItem: vi.fn((key: string, value: string) => { store[key] = value; }), removeItem: vi.fn((key: string) => { delete store[key]; }), clear: vi.fn(() => { for (const key of Object.keys(store)) { delete store[key]; } }), get length() { return Object.keys(store).length; }, key: vi.fn((index: number) => Object.keys(store)[index] ?? null), }; Object.defineProperty(globalThis, "localStorage", { value: localStorageMock, writable: true, }); }