tududi/frontend/__tests__/setup.ts
Chris Veleris 3cf9fbe22b Add tests
2025-07-23 12:22:06 +03:00

95 lines
No EOL
2.3 KiB
TypeScript

import '@testing-library/jest-dom';
// Mock i18next
jest.mock('react-i18next', () => ({
useTranslation: () => ({
t: (key: string, defaultValue?: string) => defaultValue || key,
i18n: {
changeLanguage: () => new Promise(() => {}),
language: 'en',
},
}),
}));
// Mock Zustand store
jest.mock('@/store/taskStore', () => ({
useTaskStore: () => ({
tasks: [],
loading: false,
error: null,
fetchTasks: jest.fn(),
updateTask: jest.fn(),
createTask: jest.fn(),
deleteTask: jest.fn(),
toggleTaskCompletion: jest.fn(),
}),
}));
// Mock SWR
jest.mock('swr', () => ({
__esModule: true,
default: () => ({
data: undefined,
error: undefined,
isLoading: false,
mutate: jest.fn(),
}),
}));
// Mock tasksService
jest.mock('@/utils/tasksService', () => ({
fetchTasks: jest.fn(),
createTask: jest.fn(),
updateTask: jest.fn(),
deleteTask: jest.fn(),
toggleTaskCompletion: jest.fn(),
fetchTaskById: jest.fn(),
fetchSubtasks: 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(),
removeListener: jest.fn(),
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(),
}));
// Suppress console.error for cleaner test output
const originalError = console.error;
beforeAll(() => {
console.error = (...args: any[]) => {
if (
typeof args[0] === 'string' &&
args[0].includes('Warning: ReactDOM.render is no longer supported')
) {
return;
}
originalError.call(console, ...args);
};
});
afterAll(() => {
console.error = originalError;
});