import '@testing-library/jest-dom/vitest'; import { afterEach, vi } from 'vitest'; import { cleanup } from '@testing-library/react'; afterEach(() => { cleanup(); }); if (!window.matchMedia) { Object.defineProperty(window, 'matchMedia', { writable: true, configurable: true, value: vi.fn().mockImplementation((query: string) => ({ matches: false, media: query, onchange: null, addListener: vi.fn(), removeListener: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn(), dispatchEvent: vi.fn() })) }); } class ResizeObserverMock { observe(): void { return undefined; } unobserve(): void { return undefined; } disconnect(): void { return undefined; } } if (!('ResizeObserver' in globalThis)) { Object.defineProperty(globalThis, 'ResizeObserver', { writable: true, configurable: true, value: ResizeObserverMock }); } class IntersectionObserverMock implements IntersectionObserver { readonly root: Element | Document | null = null; readonly rootMargin = '0px'; readonly thresholds: ReadonlyArray = [0]; constructor(_callback: IntersectionObserverCallback) { return undefined; } disconnect(): void { return undefined; } observe(_target: Element): void { return undefined; } takeRecords(): IntersectionObserverEntry[] { return []; } unobserve(_target: Element): void { return undefined; } } if (!('IntersectionObserver' in globalThis)) { Object.defineProperty(globalThis, 'IntersectionObserver', { writable: true, configurable: true, value: IntersectionObserverMock }); } if (!globalThis.requestAnimationFrame) { vi.stubGlobal('requestAnimationFrame', (callback: FrameRequestCallback) => window.setTimeout(() => callback(performance.now()), 16) ); } if (!globalThis.cancelAnimationFrame) { vi.stubGlobal('cancelAnimationFrame', (handle: number) => window.clearTimeout(handle)); } if (!URL.createObjectURL) { Object.defineProperty(URL, 'createObjectURL', { writable: true, configurable: true, value: vi.fn(() => 'blob:mechanica-test') }); } if (!URL.revokeObjectURL) { Object.defineProperty(URL, 'revokeObjectURL', { writable: true, configurable: true, value: vi.fn() }); }