Browse Source

✅ test(files): 完善文件上传集成测试并修复相关问题

- 修改文件服务模拟方式,确保测试中正确获取用户信息
- 修复测试中createFile方法的模拟调用方式
- 调整路由注册顺序,确保deleteRoute在正确位置

♻️ refactor(files): 优化文件上传策略实现

- 将FileService实例化移至请求处理函数内部
- 添加调试日志输出,便于跟踪用户信息和处理结果

🔧 chore(files): 调整路由注册顺序

- 调整deleteRoute的注册位置,确保路由匹配正确性
yourname 2 months ago
parent
commit
c8af845b8e

+ 7 - 8
src/server/api/files/__tests__/files.integration.test.ts

@@ -3,17 +3,12 @@ import { testClient } from 'hono/testing';
 import { DataSource } from 'typeorm';
 import { File } from '@/server/modules/files/file.entity';
 import { FileService } from '@/server/modules/files/file.service';
-import { MinioService } from '@/server/modules/files/minio.service';
 import { authMiddleware } from '@/server/middleware/auth.middleware';
 import { fileApiRoutes } from '@/server/api';
 
 // Mock dependencies
-vi.mock('@/server/modules/files/file.service', () => ({
-  FileService: vi.fn().mockImplementation(() => ({
-    createFile: vi.fn()
-  }))
-}));
-vi.mock('@/server/modules/files/minio.service');
+vi.mock('@/server/modules/files/file.service');
+// vi.mock('@/server/modules/files/minio.service');
 vi.mock('@/server/middleware/auth.middleware');
 
 describe('File API Integration Tests', () => {
@@ -28,6 +23,9 @@ describe('File API Integration Tests', () => {
 
     // Mock auth middleware to bypass authentication
     vi.mocked(authMiddleware).mockImplementation(async (_, next) => {
+      _.set('user', {
+        id: 1
+      })
       await next();
     });
 
@@ -68,7 +66,8 @@ describe('File API Integration Tests', () => {
         }
       };
 
-      mockFileService.createFile = vi.fn().mockResolvedValue(mockResponse);
+      // mockFileService.createFile = vi.fn().mockResolvedValue(mockResponse);
+      vi.mocked(mockFileService.createFile).mockResolvedValue(mockResponse)
 
       const response = await client.files['upload-policy'].$post({
         json: mockFileData

+ 1 - 1
src/server/api/files/index.ts

@@ -30,8 +30,8 @@ const app = new OpenAPIHono<AuthContext>()
 .route('/multipart-policy', multipartPolicyRoute)
 .route('/multipart-complete', completeMultipartRoute)
 .route('/', getUrlRoute)
-.route('/', deleteRoute)
 .route('/', downloadRoute)
+.route('/', deleteRoute)
 .route('/', fileRoutes)
 
 export default app;

+ 6 - 2
src/server/api/files/upload-policy/post.ts

@@ -51,14 +51,17 @@ const createUploadPolicyRoute = createRoute({
   }
 });
 
-// 创建文件服务实例
-const fileService = new FileService(AppDataSource);
 
 // 创建路由实例
 const app = new OpenAPIHono<AuthContext>().openapi(createUploadPolicyRoute, async (c) => {
   try {
     const data = await c.req.json();
     const user = c.get('user');
+
+    console.debug('user', user)
+    
+    // 创建文件服务实例
+    const fileService = new FileService(AppDataSource);
     
     // 添加用户ID到文件数据
     const fileData = {
@@ -67,6 +70,7 @@ const app = new OpenAPIHono<AuthContext>().openapi(createUploadPolicyRoute, asyn
       uploadTime: new Date()
     };
     const result = await fileService.createFile(fileData);
+    console.debug('result', result)
     // 手动转换日期类型并处理可选字段
     const formattedFile = {
       ...result.file,