import '@testing-library/jest-dom/vitest'; import { cleanup } from '@testing-library/react'; import { afterEach, beforeAll, vi } from 'vitest'; class ResizeObserverMock { observe() { return undefined; } unobserve() { return undefined; } disconnect() { return undefined; } } class IntersectionObserverMock { readonly root: Element | Document | null = null; readonly rootMargin = '0px'; readonly thresholds: ReadonlyArray = []; observe() { return undefined; } unobserve() { return undefined; } disconnect() { return undefined; } takeRecords() { return []; } } beforeAll(() => { Object.defineProperty(window, 'matchMedia', { writable: true, value: vi.fn().mockImplementation((query: string) => ({ matches: false, media: query, onchange: null, addEventListener: vi.fn(), removeEventListener: vi.fn(), addListener: vi.fn(), removeListener: vi.fn(), dispatchEvent: vi.fn(() => false), })), }); vi.stubGlobal('ResizeObserver', ResizeObserverMock); vi.stubGlobal('IntersectionObserver', IntersectionObserverMock); if (!HTMLElement.prototype.scrollIntoView) { Object.defineProperty(HTMLElement.prototype, 'scrollIntoView', { configurable: true, value: vi.fn(), }); } }); afterEach(() => { cleanup(); window.localStorage.clear(); window.sessionStorage.clear(); vi.clearAllMocks(); });