import { render, screen } from '@testing-library/react'; import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { QueryProvider } from '../query-provider'; vi.mock('next-intl', () => ({ useTranslations: () => (key: string) => key, })); vi.mock('@/lib/query-client', async () => { const { QueryClient } = await import('@tanstack/react-query'); return { getQueryClient: () => new QueryClient() }; }); function Boom() { throw new Error('query-fail'); } describe('QueryProvider', () => { let spy: ReturnType; beforeEach(() => { spy = vi.spyOn(console, 'error').mockImplementation(() => {}); }); afterEach(() => { spy.mockRestore(); }); it('renders children under provider', () => { render(
ok
, ); expect(screen.getByText('ok')).toBeInTheDocument(); }); it('catches thrown errors and renders fallback with retry button', () => { render( , ); // error.description & common.retry keys surface via mocked translator expect(screen.getByRole('alert')).toBeInTheDocument(); expect(screen.getByRole('button', { name: 'common.retry' })).toBeInTheDocument(); }); it('surfaces the underlying error message in fallback', () => { render( , ); expect(screen.getByText('query-fail')).toBeInTheDocument(); }); });