ybt | 02e716d | 2025-04-15 17:19:32 +0800 | [diff] [blame^] | 1 | // 这个文件包含测试环境的设置代码 |
| 2 | import { expect, afterEach } from 'vitest'; |
| 3 | import { cleanup } from '@testing-library/react'; |
| 4 | import * as matchers from '@testing-library/jest-dom'; |
| 5 | |
| 6 | // 扩展 Vitest 的断言能力 |
| 7 | expect.extend(matchers); |
| 8 | |
| 9 | // 每个测试后自动清理 |
| 10 | afterEach(() => { |
| 11 | cleanup(); |
| 12 | }); |
| 13 | |
| 14 | // 模拟 window.matchMedia |
| 15 | Object.defineProperty(window, 'matchMedia', { |
| 16 | writable: true, |
| 17 | value: vi.fn().mockImplementation(query => ({ |
| 18 | matches: false, |
| 19 | media: query, |
| 20 | onchange: null, |
| 21 | addListener: vi.fn(), // 兼容旧版 API |
| 22 | removeListener: vi.fn(), // 兼容旧版 API |
| 23 | addEventListener: vi.fn(), |
| 24 | removeEventListener: vi.fn(), |
| 25 | dispatchEvent: vi.fn(), |
| 26 | })), |
| 27 | }); |
| 28 | |
| 29 | // 模拟 localStorage |
| 30 | const localStorageMock = (() => { |
| 31 | let store = {}; |
| 32 | return { |
| 33 | getItem: (key) => store[key] || null, |
| 34 | setItem: (key, value) => { |
| 35 | store[key] = value.toString(); |
| 36 | }, |
| 37 | removeItem: (key) => { |
| 38 | delete store[key]; |
| 39 | }, |
| 40 | clear: () => { |
| 41 | store = {}; |
| 42 | }, |
| 43 | }; |
| 44 | })(); |
| 45 | |
| 46 | Object.defineProperty(window, 'localStorage', { |
| 47 | value: localStorageMock, |
| 48 | }); |