Files
mealprep/frontend/src/test-setup.ts
Marcel Raddatz 90c9ea1894 feat(planner): add UndoBar component with 4s auto-dismiss
Shows undo notification after slot add/replace. Rückgängig button
calls onundo, auto-dismisses after 4s via ondismiss callback.
Also patches test-setup for userEvent + fake timers compatibility.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 22:57:05 +02:00

36 lines
1.4 KiB
TypeScript

import '@testing-library/jest-dom/vitest';
// Import @testing-library/svelte here so its beforeEach (setup/asyncWrapper=act)
// is registered before our own beforeEach below.
import '@testing-library/svelte';
import { configure } from '@testing-library/dom';
import { vi } from 'vitest';
import { tick } from 'svelte';
import userEvent from '@testing-library/user-event';
// Patch userEvent direct-API methods to use delay:null when fake timers are
// active. With delay:null, user-event's internal wait() short-circuits
// (typeof null !== 'number') and no setTimeout is scheduled — so clicks and
// other interactions work correctly under vi.useFakeTimers().
const originalClick = userEvent.click.bind(userEvent);
// @ts-expect-error patching direct API
userEvent.click = (element: Element, options = {}) => {
if (vi.isFakeTimers()) {
// @ts-expect-error delay:null is a valid user-event option
return originalClick(element, { delay: null, ...options });
}
return originalClick(element, options);
};
// Also update asyncWrapper to call tick() after async operations so Svelte
// DOM updates are flushed. @testing-library/svelte's act() already does this,
// but we re-configure after it to preserve our fake-timer behaviour.
beforeEach(() => {
configure({
asyncWrapper: async (fn: () => Promise<unknown>) => {
const result = await fn();
await tick();
return result;
}
});
});