/** * KnowAI UI组件库测试设置文件 * 配置全局测试环境和共享设置 */ import { vi } from 'vitest'; import { config } from '@vue/test-utils'; // 导入Element Plus的ElIcon组件,用于Icon组件测试 import { ElIcon } from 'element-plus'; // 配置Vue测试工具 config.global.components = { ElIcon // 全局注册ElIcon组件 }; config.global.stubs = { // 全局组件存根配置 }; // 模拟浏览器API Object.defineProperty(window, 'localStorage', { value: { getItem: vi.fn(), setItem: vi.fn(), removeItem: vi.fn(), clear: vi.fn() }, writable: true }); Object.defineProperty(window, 'sessionStorage', { value: { getItem: vi.fn(), setItem: vi.fn(), removeItem: vi.fn(), clear: vi.fn() }, writable: true }); // 模拟IntersectionObserver globalThis.IntersectionObserver = vi.fn().mockImplementation(() => ({ observe: vi.fn(), unobserve: vi.fn(), disconnect: vi.fn() })); // 模拟ResizeObserver globalThis.ResizeObserver = vi.fn().mockImplementation(() => ({ observe: vi.fn(), unobserve: vi.fn(), disconnect: vi.fn() })); // 模拟requestAnimationFrame globalThis.requestAnimationFrame = vi.fn((cb: FrameRequestCallback) => setTimeout(cb, 0)); // 模拟cancelAnimationFrame globalThis.cancelAnimationFrame = vi.fn((id: number) => clearTimeout(id)); // 为fetch提供一个基本的模拟实现,避免birpc超时 globalThis.fetch = vi.fn().mockResolvedValue({ ok: true, status: 200, json: vi.fn().mockResolvedValue({}), text: vi.fn().mockResolvedValue('') }); // 模拟document相关API Object.defineProperty(document, 'visibilityState', { value: 'visible', writable: true }); document.onvisibilitychange = vi.fn(); // 设置环境变量 (globalThis as any).process = (globalThis as any).process || {}; (globalThis as any).process.env = (globalThis as any).process.env || {}; (globalThis as any).process.env.NODE_ENV = 'test'; // 禁用控制台警告和错误,避免测试输出过于嘈杂 vi.spyOn(console, 'warn').mockImplementation(() => {}); vi.spyOn(console, 'error').mockImplementation(() => {}); // 注释掉定时器控制,避免影响Vitest内部异步操作 // vi.useFakeTimers();