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));
}