Browse Source

✨ feat(test-utils): 添加next-themes依赖并优化包结构

- 添加next-themes@0.4.6依赖以支持主题测试功能
- 调整dependencies和devDependencies顺序,优化包结构
- 删除src/client/test-render.tsx文件及其导出的TestWrapper和AdminTestWrapper组件
- 在tsconfig.json中添加对@d8d/server的路径引用
- 添加tsconfig.json中的项目引用配置

♻️ refactor(test-utils): 调整测试工具代码结构

- 从测试工具中移除TestWrapper和AdminTestWrapper组件
- 在TestQueryProvider组件中添加类型忽略注释以解决类型检查问题
yourname 1 tháng trước cách đây
mục cha
commit
8b5cd7de52

+ 7 - 6
packages/test-utils/package.json

@@ -30,20 +30,21 @@
     "test:run": "vitest run"
   },
   "dependencies": {
-    "@testing-library/react": "^16.3.0",
     "@testing-library/jest-dom": "^6.8.0",
+    "@testing-library/react": "^16.3.0",
     "@testing-library/user-event": "^14.6.1",
-    "@types/node": "^20.10.5"
+    "@types/node": "^20.10.5",
+    "next-themes": "^0.4.6"
   },
   "devDependencies": {
-    "typescript": "^5.8.3",
-    "vitest": "^3.2.4",
+    "@hono/zod-openapi": "^1.0.2",
+    "@tanstack/react-query": "^5.83.0",
     "@types/react": "^19.1.8",
     "@types/react-dom": "^19.1.6",
-    "@tanstack/react-query": "^5.83.0",
     "react-router-dom": "^7.7.0",
     "typeorm": "^0.3.25",
-    "@hono/zod-openapi": "^1.0.2"
+    "typescript": "^5.8.3",
+    "vitest": "^3.2.4"
   },
   "peerDependencies": {
     "@d8d/server": "workspace:*",

+ 0 - 7
packages/test-utils/src/client/index.ts

@@ -17,13 +17,6 @@ export {
   mockServerError
 } from './test-query.js';
 
-/**
- * React 渲染测试工具
- */
-export {
-  TestWrapper,
-  AdminTestWrapper
-} from './test-render.js';
 
 /**
  * React Router 测试工具

+ 2 - 1
packages/test-utils/src/client/test-query.tsx

@@ -32,9 +32,10 @@ export function TestQueryProvider({
   client?: QueryClient
 }) {
   const queryClient = client || createTestQueryClient();
-
+  
   return (
     <QueryClientProvider client={queryClient}>
+      {/* @ts-ignore */}
       {children}
     </QueryClientProvider>
   );

+ 0 - 80
packages/test-utils/src/client/test-render.tsx

@@ -1,80 +0,0 @@
-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));
-}

+ 6 - 1
packages/test-utils/tsconfig.json

@@ -22,7 +22,9 @@
     "emitDecoratorMetadata": true,
     "baseUrl": ".",
     "paths": {
-      "@/*": ["./src/*"]
+      "@/*": ["./src/*"],
+      "@d8d/server": ["../server/src/index.ts"],
+      "@d8d/server/*": ["../server/src/*"]
     }
   },
   "include": [
@@ -32,5 +34,8 @@
   "exclude": [
     "node_modules",
     "dist"
+  ],
+  "references": [
+    { "path": "../server" }
   ]
 }

+ 3 - 0
pnpm-lock.yaml

@@ -301,6 +301,9 @@ importers:
       hono:
         specifier: ^4.8.5
         version: 4.8.5
+      next-themes:
+        specifier: ^0.4.6
+        version: 0.4.6(react-dom@19.2.0(react@19.2.0))(react@19.2.0)
       react:
         specifier: ^19.1.0
         version: 19.2.0