Files
eranos/src/test/setup.ts
T

58 lines
1.7 KiB
TypeScript

import '@testing-library/jest-dom';
import { vi } from 'vitest';
// Node.js 22 has a built-in `localStorage` that lacks standard Web Storage API
// methods (getItem, setItem, etc.) unless `--localstorage-file` is provided.
// This conflicts with jsdom's proper localStorage, so we override the global.
const localStorageMap = new Map<string, string>();
const localStorageMock: Storage = {
getItem: (key: string) => localStorageMap.get(key) ?? null,
setItem: (key: string, value: string) => { localStorageMap.set(key, value); },
removeItem: (key: string) => { localStorageMap.delete(key); },
clear: () => { localStorageMap.clear(); },
get length() { return localStorageMap.size; },
key: (index: number) => [...localStorageMap.keys()][index] ?? null,
};
Object.defineProperty(globalThis, 'localStorage', {
value: localStorageMock,
writable: true,
configurable: true,
});
// Mock window.matchMedia
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: vi.fn().mockImplementation((query) => ({
matches: false,
media: query,
onchange: null,
addListener: vi.fn(), // deprecated
removeListener: vi.fn(), // deprecated
addEventListener: vi.fn(),
removeEventListener: vi.fn(),
dispatchEvent: vi.fn(),
})),
});
// Mock window.scrollTo
Object.defineProperty(window, 'scrollTo', {
writable: true,
value: vi.fn(),
});
// Mock IntersectionObserver
global.IntersectionObserver = vi.fn().mockImplementation((_callback) => ({
observe: vi.fn(),
unobserve: vi.fn(),
disconnect: vi.fn(),
root: null,
rootMargin: '',
thresholds: [],
}));
// Mock ResizeObserver
global.ResizeObserver = vi.fn().mockImplementation((_callback) => ({
observe: vi.fn(),
unobserve: vi.fn(),
disconnect: vi.fn(),
}));