lilith-platform.live/codebase/@features/landing/frontend-public/vitest.setup.ts
Claude Code 25d2c7ad65 init(codebase-default): 🎉 Implement foundational directory structure with core modules and utility files
Co-Authored-By: Lilith Autocommit <noreply@atlilith.com>
2026-03-25 22:50:24 -07:00

101 lines
2.4 KiB
TypeScript

/**
* Vitest Setup File
*
* Global test setup including:
* - DOM testing utilities
* - Mock localStorage
* - React testing environment
*/
import '@testing-library/jest-dom/vitest';
import * as React from 'react';
import { cleanup } from '@testing-library/react';
import { afterEach, beforeAll, beforeEach, vi } from 'vitest';
// Ensure React is available globally for jsdom
beforeAll(() => {
globalThis.React = React;
});
// Cleanup after each test
afterEach(() => {
cleanup();
vi.clearAllMocks();
});
// Mock localStorage
const createLocalStorageMock = () => {
const store: Record<string, string> = {};
return {
getItem: vi.fn((key: string) => store[key] || null),
setItem: vi.fn((key: string, value: string) => {
store[key] = value;
}),
removeItem: vi.fn((key: string) => {
delete store[key];
}),
clear: vi.fn(() => {
Object.keys(store).forEach((key) => delete store[key]);
}),
key: vi.fn((index: number) => Object.keys(store)[index] || null),
get length() {
return Object.keys(store).length;
},
};
};
beforeAll(() => {
const localStorageMock = createLocalStorageMock();
Object.defineProperty(window, 'localStorage', {
value: localStorageMock,
writable: true,
});
});
// Reset localStorage mock before each test
beforeEach(() => {
vi.mocked(localStorage.getItem).mockClear();
vi.mocked(localStorage.setItem).mockClear();
vi.mocked(localStorage.removeItem).mockClear();
vi.mocked(localStorage.clear).mockClear();
});
// Mock ResizeObserver
beforeAll(() => {
global.ResizeObserver = vi.fn().mockImplementation(() => ({
observe: vi.fn(),
unobserve: vi.fn(),
disconnect: vi.fn(),
}));
});
// Mock matchMedia
beforeAll(() => {
Object.defineProperty(window, 'matchMedia', {
writable: true,
value: vi.fn().mockImplementation((query: string) => ({
matches: false,
media: query,
onchange: null,
addListener: vi.fn(),
removeListener: vi.fn(),
addEventListener: vi.fn(),
removeEventListener: vi.fn(),
dispatchEvent: vi.fn(),
})),
});
});
// Mock IntersectionObserver
beforeAll(() => {
global.IntersectionObserver = vi.fn().mockImplementation(() => ({
observe: vi.fn(),
unobserve: vi.fn(),
disconnect: vi.fn(),
root: null,
rootMargin: '',
thresholds: [],
takeRecords: vi.fn().mockReturnValue([]),
}));
});