| // 这个文件包含测试环境的设置代码 |
| import { expect, afterEach } from 'vitest'; |
| import { cleanup } from '@testing-library/react'; |
| import * as matchers from '@testing-library/jest-dom'; |
| |
| // 扩展 Vitest 的断言能力 |
| expect.extend(matchers); |
| |
| // 每个测试后自动清理 |
| afterEach(() => { |
| cleanup(); |
| }); |
| |
| // 模拟 window.matchMedia |
| Object.defineProperty(window, 'matchMedia', { |
| writable: true, |
| value: vi.fn().mockImplementation(query => ({ |
| matches: false, |
| media: query, |
| onchange: null, |
| addListener: vi.fn(), // 兼容旧版 API |
| removeListener: vi.fn(), // 兼容旧版 API |
| addEventListener: vi.fn(), |
| removeEventListener: vi.fn(), |
| dispatchEvent: vi.fn(), |
| })), |
| }); |
| |
| // 模拟 localStorage |
| const localStorageMock = (() => { |
| let store = {}; |
| return { |
| getItem: (key) => store[key] || null, |
| setItem: (key, value) => { |
| store[key] = value.toString(); |
| }, |
| removeItem: (key) => { |
| delete store[key]; |
| }, |
| clear: () => { |
| store = {}; |
| }, |
| }; |
| })(); |
| |
| Object.defineProperty(window, 'localStorage', { |
| value: localStorageMock, |
| }); |