import '@testing-library/jest-dom'; import { vi } from 'vitest'; class MockIntersectionObserver { observe = vi.fn(); disconnect = vi.fn(); unobserve = vi.fn(); } Object.defineProperty(window, 'IntersectionObserver', { writable: true, configurable: true, value: MockIntersectionObserver, }); const localStorageMock = (() => { let store: Record = {}; return { getItem: (key: string) => store[key] || null, setItem: (key: string, value: string) => { store[key] = value.toString(); }, removeItem: (key: string) => { delete store[key]; }, clear: () => { store = {}; }, }; })(); Object.defineProperty(window, 'localStorage', { value: localStorageMock, writable: true, }); Object.defineProperty(window, 'sessionStorage', { value: localStorageMock, writable: true, }); if (typeof globalThis !== 'undefined') { (globalThis as any).localStorage = localStorageMock; (globalThis as any).sessionStorage = localStorageMock; } vi.mock('next/navigation', () => ({ useRouter: () => ({ push: vi.fn(), replace: vi.fn(), prefetch: vi.fn(), back: vi.fn(), }), usePathname: () => '/', useSearchParams: () => new URLSearchParams(), }));