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 ( {children} ); } /** * 专门用于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 ( {children} ); } /** * 等待组件更新完成 */ export async function waitForUpdate(delay = 0) { await new Promise(resolve => setTimeout(resolve, delay)); }