/** * Vitest setup file for datatable tests * Provides DOM environment setup and utilities */ import { beforeEach, afterEach, vi } from 'vitest'; // Mock KTComponents to prevent auto-initialization errors vi.mock('../../../index', () => ({ default: { init: vi.fn(), }, KTComponents: { init: vi.fn(), }, })); // Setup DOM environment before each test beforeEach(() => { // Clear localStorage localStorage.clear(); // Reset document body document.body.innerHTML = ''; // Clear any global state // Add any other global setup here }); // Cleanup after each test afterEach(() => { // Clear localStorage localStorage.clear(); // Reset document body document.body.innerHTML = ''; // Clear all pending timers to prevent "document is not defined" errors vi.clearAllTimers(); }); // Mock window.matchMedia if needed Object.defineProperty(window, 'matchMedia', { writable: true, value: (query: string) => ({ matches: false, media: query, onchange: null as | ((this: MediaQueryList, ev: MediaQueryListEvent) => unknown) | null, addListener: () => {}, // deprecated removeListener: () => {}, // deprecated addEventListener: () => {}, removeEventListener: () => {}, dispatchEvent: () => true, }), }); // Export utilities that tests can use export const waitFor = (ms: number) => new Promise((resolve) => setTimeout(resolve, ms)); export const createMockElement = ( tag: string, attributes: Record = {}, ) => { const el = document.createElement(tag); Object.entries(attributes).forEach(([key, value]) => { el.setAttribute(key, value); }); return el; };