| import '@testing-library/jest-dom'; |
| |
| // 全局测试配置 |
| global.console = { |
| ...console, |
| // 在测试中禁用console.log以减少噪音 |
| log: jest.fn(), |
| debug: jest.fn(), |
| info: jest.fn(), |
| warn: jest.fn(), |
| error: jest.fn(), |
| }; |
| |
| // Mock window.matchMedia |
| Object.defineProperty(window, 'matchMedia', { |
| writable: true, |
| value: jest.fn().mockImplementation(query => ({ |
| matches: false, |
| media: query, |
| onchange: null, |
| addListener: jest.fn(), // deprecated |
| removeListener: jest.fn(), // deprecated |
| addEventListener: jest.fn(), |
| removeEventListener: jest.fn(), |
| dispatchEvent: jest.fn(), |
| })), |
| }); |
| |
| // Mock ResizeObserver |
| global.ResizeObserver = jest.fn().mockImplementation(() => ({ |
| observe: jest.fn(), |
| unobserve: jest.fn(), |
| disconnect: jest.fn(), |
| })); |
| |
| // Mock IntersectionObserver |
| global.IntersectionObserver = jest.fn().mockImplementation(() => ({ |
| observe: jest.fn(), |
| unobserve: jest.fn(), |
| disconnect: jest.fn(), |
| })); |
| |
| // Mock localStorage |
| const localStorageMock: Storage = { |
| getItem: jest.fn(), |
| setItem: jest.fn(), |
| removeItem: jest.fn(), |
| clear: jest.fn(), |
| length: 0, |
| key: jest.fn(), |
| }; |
| global.localStorage = localStorageMock; |
| global.sessionStorage = localStorageMock; |