| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 |
- import { ReactNode } from 'react';
- import { BrowserRouter } from 'react-router-dom';
- import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
- import { ThemeProvider } from 'next-themes';
- import { AuthProvider } from '../../../src/client/admin/hooks/AuthProvider';
- import { vi } from 'vitest';
- /**
- * 创建测试用的QueryClient
- */
- export function createTestQueryClient() {
- return new QueryClient({
- defaultOptions: {
- queries: {
- retry: false,
- gcTime: 0,
- },
- mutations: {
- retry: false,
- },
- }
- });
- }
- /**
- * 测试渲染器的包装组件
- */
- export function TestWrapper({ children }: { children: ReactNode }) {
- const queryClient = createTestQueryClient();
- return (
- <QueryClientProvider client={queryClient}>
- <ThemeProvider attribute="class" defaultTheme="light">
- <BrowserRouter>
- {children}
- </BrowserRouter>
- </ThemeProvider>
- </QueryClientProvider>
- );
- }
- /**
- * 专门用于admin页面的测试包装器,包含AuthProvider
- */
- export function AdminTestWrapper({ children }: { children: ReactNode }) {
- const queryClient = createTestQueryClient();
- // Mock localStorage for tests
- const localStorageMock = {
- getItem: vi.fn(() => null),
- setItem: vi.fn(),
- removeItem: vi.fn(),
- clear: vi.fn(),
- };
- // Set up localStorage mock
- Object.defineProperty(window, 'localStorage', {
- value: localStorageMock,
- writable: true,
- });
- return (
- <QueryClientProvider client={queryClient}>
- <ThemeProvider attribute="class" defaultTheme="light">
- <BrowserRouter>
- <AuthProvider>
- {children}
- </AuthProvider>
- </BrowserRouter>
- </ThemeProvider>
- </QueryClientProvider>
- );
- }
- /**
- * 等待组件更新完成
- */
- export async function waitForUpdate(delay = 0) {
- await new Promise(resolve => setTimeout(resolve, delay));
- }
|