Преглед на файлове

✅ test(file): 完善FileService单元测试

- 修复测试中直接调用service方法的问题,改为通过repository模拟数据库操作
- 为completeMultipartUpload测试添加repository模拟实现
- 调整测试断言,直接验证repository方法调用而非service方法调用
- 改进测试用例的边界条件覆盖,模拟文件记录不存在的场景
yourname преди 2 месеца
родител
ревизия
0aaaf5f45b
променени са 1 файла, в които са добавени 17 реда и са изтрити 10 реда
  1. 17 10
      src/server/modules/files/__tests__/file.service.test.ts

+ 17 - 10
src/server/modules/files/__tests__/file.service.test.ts

@@ -17,7 +17,10 @@ describe('FileService', () => {
 
   beforeEach(() => {
     mockDataSource = {
-      getRepository: vi.fn()
+      getRepository: vi.fn(() => ({
+        findOneBy: vi.fn(),
+        save: vi.fn()
+      }))
     } as unknown as DataSource;
 
   });
@@ -333,13 +336,13 @@ describe('FileService', () => {
         getFileUrl: mockGetFileUrl
       } as unknown as MinioService));
 
-      const fileService = new FileService(mockDataSource);
-
-      // 模拟getById方法返回文件记录
-      vi.spyOn(fileService, 'getById').mockResolvedValue(mockFile);
+      const mockRepository = {
+        findOneBy: vi.fn().mockResolvedValue(mockFile),
+        save: vi.fn().mockResolvedValue({ ...mockFile, size: 2048 } as File)
+      };
 
-      // 模拟update方法更新文件大小
-      vi.spyOn(fileService, 'update').mockResolvedValue({ ...mockFile, size: 2048 } as File);
+      mockDataSource.getRepository = vi.fn().mockReturnValue(mockRepository);
+      const fileService = new FileService(mockDataSource);
 
       const result = await fileService.completeMultipartUpload(uploadData);
 
@@ -349,8 +352,8 @@ describe('FileService', () => {
         'upload-123',
         [{ PartNumber: 1, ETag: 'etag1' }, { PartNumber: 2, ETag: 'etag2' }]
       );
-      expect(fileService.getById).toHaveBeenCalledWith(1);
-      expect(fileService.update).toHaveBeenCalledWith(1, expect.objectContaining({
+      expect(mockRepository.findOneBy).toHaveBeenCalledWith({ path: '1/test-file.txt' });
+      expect(mockRepository.save).toHaveBeenCalledWith(expect.objectContaining({
         size: 2048
       }));
       expect(result).toEqual({
@@ -375,8 +378,12 @@ describe('FileService', () => {
         completeMultipartUpload: mockCompleteMultipartUpload
       } as unknown as MinioService));
 
+      const mockRepository = {
+        findOneBy: vi.fn().mockResolvedValue(null)
+      };
+
+      mockDataSource.getRepository = vi.fn().mockReturnValue(mockRepository);
       const fileService = new FileService(mockDataSource);
-      vi.spyOn(fileService, 'getById').mockResolvedValue(null);
 
       await expect(fileService.completeMultipartUpload(uploadData)).rejects.toThrow('文件记录不存在');
     });