| /** | |
| * Vitest 测试环境设置 | |
| * 提供全局 mock 和测试工具 | |
| */ | |
| import { config } from '@vue/test-utils' | |
| import { vi } from 'vitest' | |
| // Mock requestIdleCallback (Safari < 15 不支持) | |
| if (typeof globalThis.requestIdleCallback === 'undefined') { | |
| globalThis.requestIdleCallback = ((callback: IdleRequestCallback) => { | |
| return window.setTimeout(() => callback({ didTimeout: false, timeRemaining: () => 50 }), 1) | |
| }) as unknown as typeof requestIdleCallback | |
| } | |
| if (typeof globalThis.cancelIdleCallback === 'undefined') { | |
| globalThis.cancelIdleCallback = ((id: number) => { | |
| window.clearTimeout(id) | |
| }) as unknown as typeof cancelIdleCallback | |
| } | |
| // Mock IntersectionObserver | |
| class MockIntersectionObserver { | |
| observe = vi.fn() | |
| disconnect = vi.fn() | |
| unobserve = vi.fn() | |
| } | |
| globalThis.IntersectionObserver = MockIntersectionObserver as unknown as typeof IntersectionObserver | |
| // Mock ResizeObserver | |
| class MockResizeObserver { | |
| observe = vi.fn() | |
| disconnect = vi.fn() | |
| unobserve = vi.fn() | |
| } | |
| globalThis.ResizeObserver = MockResizeObserver as unknown as typeof ResizeObserver | |
| // Vue Test Utils 全局配置 | |
| config.global.stubs = { | |
| // 可以在这里添加全局 stub | |
| } | |
| // 设置全局测试超时 | |
| vi.setConfig({ testTimeout: 10000 }) | |