ten99timecard/client/src/__tests__/setup.ts
2026-03-04 21:21:59 -05:00

37 lines
1.1 KiB
TypeScript

import '@testing-library/jest-dom';
import { webcrypto } from 'node:crypto';
import { beforeEach } from 'vitest';
// jsdom lacks WebCrypto subtle — polyfill from Node
if (!globalThis.crypto?.subtle) {
Object.defineProperty(globalThis, 'crypto', { value: webcrypto });
}
// jsdom lacks ResizeObserver (needed by Recharts)
class ResizeObserverMock {
observe() {}
unobserve() {}
disconnect() {}
}
globalThis.ResizeObserver = ResizeObserverMock as unknown as typeof ResizeObserver;
// structuredClone polyfill for older jsdom
if (!globalThis.structuredClone) {
globalThis.structuredClone = (o: unknown) => JSON.parse(JSON.stringify(o));
}
// Silence "not implemented: navigation" warnings from jsdom
const originalWarn = console.warn;
console.warn = (...args: unknown[]) => {
if (typeof args[0] === 'string' && args[0].includes('Not implemented')) return;
originalWarn(...args);
};
// Reset cookies between tests
beforeEach(() => {
document.cookie.split(';').forEach((c) => {
const name = c.split('=')[0].trim();
if (name) document.cookie = `${name}=; max-age=0; path=/`;
});
localStorage.clear();
});