import '@testing-library/jest-dom'; import { vi } from 'vitest'; class ResizeObserverMock { observe = vi.fn(); unobserve = vi.fn(); disconnect = vi.fn(); } global.ResizeObserver = ResizeObserverMock; Object.defineProperty(window, 'matchMedia', { writable: true, value: vi.fn().mockImplementation((query) => ({ matches: false, media: query, onchange: null, addListener: vi.fn(), // Deprecated removeListener: vi.fn(), // Deprecated addEventListener: vi.fn(), removeEventListener: vi.fn(), dispatchEvent: vi.fn(), })), }); // jsdom sometimes does not expose localStorage.clear(); provide a functional polyfill if (typeof window.localStorage.clear !== 'function') { const store = new Map(); Object.defineProperty(window, 'localStorage', { configurable: true, value: { getItem: (key: string): string | null => store.get(key) ?? null, setItem: (key: string, value: string): void => { store.set(key, value); }, removeItem: (key: string): void => { store.delete(key); }, clear: (): void => { store.clear(); }, key: (index: number): string | null => [...store.keys()][index] ?? null, get length(): number { return store.size; }, }, }); }