import '@testing-library/jest-dom' import { expect, afterEach, vi } from 'vitest' import { cleanup } from '@testing-library/react' // Cleanup after each test afterEach(() => { cleanup() }) // Mock Next.js router vi.mock('next/navigation', () => ({ useRouter: () => ({ push: vi.fn(), replace: vi.fn(), prefetch: vi.fn(), back: vi.fn(), pathname: '/', query: {}, asPath: '/' }), usePathname: () => '/', useSearchParams: () => new URLSearchParams(), useParams: () => ({}) })) // Mock Next.js image component vi.mock('next/image', () => ({ default: ({ src, alt, ...props }: any) => { // eslint-disable-next-line @next/next/no-img-element return {alt} } })) // Mock window.matchMedia Object.defineProperty(window, 'matchMedia', { writable: true, value: vi.fn().mockImplementation(query => ({ matches: false, media: query, onchange: null, addListener: vi.fn(), removeListener: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn(), dispatchEvent: vi.fn() })) }) // Mock IntersectionObserver global.IntersectionObserver = class IntersectionObserver { constructor() {} disconnect() {} observe() {} takeRecords() { return [] } unobserve() {} } as any