/** * 前端测试全局设置 * * 配置 MSW (Mock Service Worker) 和测试工具 */ import '@testing-library/jest-dom' import { afterAll, afterEach, beforeAll, vi } from 'vitest' // import { server } from './mocks/server' // MSW 服务器设置 // beforeAll(() => server.listen({ onUnhandledRequest: 'error' })) // afterEach(() => server.resetHandlers()) // afterAll(() => server.close()) // Mock window.matchMedia 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(), })), }) // Mock IntersectionObserver class MockIntersectionObserver implements IntersectionObserver { readonly root: Element | null = null readonly rootMargin: string = '' readonly thresholds: ReadonlyArray = [] constructor( private callback: IntersectionObserverCallback, _options?: IntersectionObserverInit ) {} observe(_target: Element): void {} unobserve(_target: Element): void {} disconnect(): void {} takeRecords(): IntersectionObserverEntry[] { return [] } } window.IntersectionObserver = MockIntersectionObserver // Mock ResizeObserver class MockResizeObserver implements ResizeObserver { constructor(_callback: ResizeObserverCallback) {} observe(_target: Element, _options?: ResizeObserverOptions): void {} unobserve(_target: Element): void {} disconnect(): void {} } window.ResizeObserver = MockResizeObserver // Mock URL.createObjectURL URL.createObjectURL = vi.fn(() => 'mock-url') URL.revokeObjectURL = vi.fn() // Mock scrollTo window.scrollTo = vi.fn() // 清理 localStorage afterEach(() => { localStorage.clear() sessionStorage.clear() })