34 lines
1.1 KiB
TypeScript
34 lines
1.1 KiB
TypeScript
|
|
import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
|
||
|
|
import { render, type RenderOptions } from '@testing-library/react';
|
||
|
|
import { MemoryRouter, type MemoryRouterProps } from 'react-router-dom';
|
||
|
|
import type { ReactElement, ReactNode } from 'react';
|
||
|
|
import { ToastProvider } from '@/hooks/useToast';
|
||
|
|
|
||
|
|
interface WrapperOptions {
|
||
|
|
routerProps?: MemoryRouterProps;
|
||
|
|
}
|
||
|
|
|
||
|
|
export function makeQueryClient(): QueryClient {
|
||
|
|
return new QueryClient({
|
||
|
|
defaultOptions: {
|
||
|
|
queries: { retry: false, gcTime: 0, staleTime: 0 },
|
||
|
|
mutations: { retry: false },
|
||
|
|
},
|
||
|
|
});
|
||
|
|
}
|
||
|
|
|
||
|
|
export function renderWithProviders(
|
||
|
|
ui: ReactElement,
|
||
|
|
{ routerProps, ...rtlOptions }: WrapperOptions & Omit<RenderOptions, 'wrapper'> = {},
|
||
|
|
) {
|
||
|
|
const client = makeQueryClient();
|
||
|
|
const Wrapper = ({ children }: { children: ReactNode }) => (
|
||
|
|
<QueryClientProvider client={client}>
|
||
|
|
<MemoryRouter {...routerProps}>
|
||
|
|
<ToastProvider>{children}</ToastProvider>
|
||
|
|
</MemoryRouter>
|
||
|
|
</QueryClientProvider>
|
||
|
|
);
|
||
|
|
return { ...render(ui, { wrapper: Wrapper, ...rtlOptions }), client };
|
||
|
|
}
|