import '@testing-library/jest-dom'; import { afterEach } from 'vitest'; import { cleanup } from '@testing-library/react'; // 部分 jsdom / node 运行环境未提供 localStorage,提供内存实现(token 持久化测试依赖)。 if (typeof globalThis.localStorage === 'undefined') { const store = new Map(); const memoryStorage: Storage = { get length() { return store.size; }, clear: () => store.clear(), getItem: (key: string) => (store.has(key) ? store.get(key)! : null), key: (index: number) => Array.from(store.keys())[index] ?? null, removeItem: (key: string) => { store.delete(key); }, setItem: (key: string, value: string) => { store.set(key, String(value)); }, }; Object.defineProperty(globalThis, 'localStorage', { value: memoryStorage, configurable: true, writable: true, }); } // jsdom 未实现 matchMedia,AntD 响应式逻辑会用到,提供桩实现。 if (!window.matchMedia) { window.matchMedia = (query: string) => ({ matches: false, media: query, onchange: null, addListener: () => {}, removeListener: () => {}, addEventListener: () => {}, removeEventListener: () => {}, dispatchEvent: () => false, }) as unknown as MediaQueryList; } afterEach(() => { cleanup(); localStorage.clear(); });