| import '@testing-library/jest-dom/vitest' |
| import { createElement } from 'react' |
| import { afterAll, afterEach, beforeAll, beforeEach, vi } from 'vitest' |
|
|
| import { queryClient } from '@/lib/queryClient' |
|
|
| import { server } from './msw/server' |
|
|
| |
| |
| beforeAll(() => server.listen({ onUnhandledRequest: 'error' })) |
| afterEach(() => server.resetHandlers()) |
| afterAll(() => server.close()) |
|
|
| |
| |
| beforeEach(() => queryClient.clear()) |
|
|
| |
| |
| |
|
|
| |
| |
| vi.mock('react-i18next', () => ({ |
| useTranslation: () => ({ |
| t: (key: string) => key, |
| i18n: { language: 'en-US', changeLanguage: async () => {} }, |
| }), |
| Trans: ({ i18nKey, children }: { i18nKey?: string; children?: unknown }) => |
| (i18nKey ?? (children as never)) as never, |
| I18nextProvider: ({ children }: { children: unknown }) => children as never, |
| |
| initReactI18next: { type: '3rdParty', init: () => {} }, |
| })) |
|
|
| |
| vi.mock('next/image', () => ({ |
| __esModule: true, |
| default: (props: Record<string, unknown>) => { |
| const { priority: _priority, ...rest } = props |
| return createElement('img', rest) |
| }, |
| })) |
|
|
| |
| class StubObserver { |
| observe() {} |
| unobserve() {} |
| disconnect() {} |
| takeRecords() { |
| return [] |
| } |
| } |
| Object.defineProperty(globalThis, 'ResizeObserver', { |
| value: StubObserver, |
| writable: true, |
| }) |
| Object.defineProperty(globalThis, 'IntersectionObserver', { |
| value: StubObserver, |
| writable: true, |
| }) |
|
|
| |
| Element.prototype.scrollIntoView = vi.fn() |
| Element.prototype.releasePointerCapture = vi.fn() |
| Element.prototype.hasPointerCapture = vi.fn(() => false) |
|
|
| |
| |
| Object.defineProperty(window, 'matchMedia', { |
| writable: 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(), |
| })), |
| }) |
|
|
| |
| const localStorageMock = (() => { |
| let store: Record<string, string> = {} |
| return { |
| getItem: vi.fn((key: string) => store[key] || null), |
| setItem: vi.fn((key: string, value: string) => { |
| store[key] = value.toString() |
| }), |
| removeItem: vi.fn((key: string) => { |
| delete store[key] |
| }), |
| clear: vi.fn(() => { |
| store = {} |
| }), |
| length: 0, |
| key: vi.fn((index: number) => Object.keys(store)[index] || null), |
| } |
| })() |
|
|
| Object.defineProperty(window, 'localStorage', { |
| value: localStorageMock, |
| }) |
|
|
| |
| class StubFontFace { |
| constructor(family: string, source: string | ArrayBuffer | ArrayBufferView, descriptors?: any) {} |
| load() { |
| return Promise.resolve(this) |
| } |
| } |
| Object.defineProperty(globalThis, 'FontFace', { |
| value: StubFontFace, |
| writable: true, |
| }) |
|
|
| Object.defineProperty(document, 'fonts', { |
| value: { |
| add: vi.fn(), |
| delete: vi.fn(), |
| clear: vi.fn(), |
| check: vi.fn(() => true), |
| load: vi.fn(() => Promise.resolve([])), |
| ready: Promise.resolve([]), |
| }, |
| writable: true, |
| }) |
|
|