blob: fba964dcf794e0e18a88343983bd0341431b69fe [file] [log] [blame]
ybt02e716d2025-04-15 17:19:32 +08001// 这个文件包含测试环境的设置代码
2import { expect, afterEach } from 'vitest';
3import { cleanup } from '@testing-library/react';
4import * as matchers from '@testing-library/jest-dom';
5
6// 扩展 Vitest 的断言能力
7expect.extend(matchers);
8
9// 每个测试后自动清理
10afterEach(() => {
11 cleanup();
12});
13
14// 模拟 window.matchMedia
15Object.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
30const 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
46Object.defineProperty(window, 'localStorage', {
47 value: localStorageMock,
48});