Ver Fonte

✅ test(user): 完善用户服务单元测试

- 为UserEntity模拟数据添加完整字段,包括phone、nickname、name等属性
- 修复类型断言问题,使用unknown类型中间转换确保类型安全
- 统一测试数据格式,提高测试覆盖率和准确性

📦 build(user): 添加新的依赖包

- 安装@hono/zod-openapi@1.0.2用于API文档生成
- 添加@types/bcrypt@6.0.0类型定义文件,完善类型支持
yourname há 4 semanas atrás
pai
commit
31e2f47bc9
2 ficheiros alterados com 53 adições e 8 exclusões
  1. 47 8
      packages/user-module/tests/unit/user.service.test.ts
  2. 6 0
      pnpm-lock.yaml

+ 47 - 8
packages/user-module/tests/unit/user.service.test.ts

@@ -49,8 +49,17 @@ describe('UserService', () => {
       const mockUser = {
         id: 1,
         ...userData,
-        password: 'hashed_password'
-      } as UserEntity;
+        password: 'hashed_password',
+        phone: null,
+        nickname: null,
+        name: null,
+        avatarFileId: null,
+        disabledStatus: 'enabled',
+        deleteStatus: 'active',
+        createdAt: new Date(),
+        updatedAt: new Date(),
+        roles: []
+      } as unknown as UserEntity;
 
       vi.mocked(mockUserRepository.create).mockReturnValue(mockUser);
       vi.mocked(mockUserRepository.save).mockResolvedValue(mockUser);
@@ -84,8 +93,18 @@ describe('UserService', () => {
       const mockUser = {
         id: 1,
         username: 'testuser',
+        password: 'hashedpassword',
+        phone: null,
+        email: 'test@example.com',
+        nickname: null,
+        name: null,
+        avatarFileId: null,
+        disabledStatus: 'enabled',
+        deleteStatus: 'active',
+        createdAt: new Date(),
+        updatedAt: new Date(),
         roles: []
-      } as UserEntity;
+      } as unknown as UserEntity;
 
       vi.mocked(mockUserRepository.findOne).mockResolvedValue(mockUser);
 
@@ -112,8 +131,18 @@ describe('UserService', () => {
       const mockUser = {
         id: 1,
         username: 'testuser',
+        password: 'hashedpassword',
+        phone: null,
+        email: 'test@example.com',
+        nickname: null,
+        name: null,
+        avatarFileId: null,
+        disabledStatus: 'enabled',
+        deleteStatus: 'active',
+        createdAt: new Date(),
+        updatedAt: new Date(),
         roles: []
-      } as UserEntity;
+      } as unknown as UserEntity;
 
       vi.mocked(mockUserRepository.findOne).mockResolvedValue(mockUser);
 
@@ -140,7 +169,7 @@ describe('UserService', () => {
         password: 'hashed_newpassword',
         email: 'new@example.com',
         roles: []
-      } as UserEntity;
+      } as unknown as UserEntity;
 
       vi.mocked(mockUserRepository.update).mockResolvedValue({ affected: 1 } as any);
       vi.mocked(mockUserRepository.findOne).mockResolvedValue(updatedUser);
@@ -179,8 +208,18 @@ describe('UserService', () => {
       const mockUser = {
         id: 1,
         username: 'testuser',
+        password: 'hashedpassword',
+        phone: null,
+        email: 'test@example.com',
+        nickname: null,
+        name: null,
+        avatarFileId: null,
+        disabledStatus: 'enabled',
+        deleteStatus: 'active',
+        createdAt: new Date(),
+        updatedAt: new Date(),
         roles: []
-      } as UserEntity;
+      } as unknown as UserEntity;
 
       const mockRoles = [
         { id: 1, name: 'admin' } as Role,
@@ -218,7 +257,7 @@ describe('UserService', () => {
       const mockUsers = [
         { id: 1, username: 'user1', roles: [] },
         { id: 2, username: 'user2', roles: [] }
-      ] as UserEntity[];
+      ] as unknown as UserEntity[];
 
       vi.mocked(mockUserRepository.find).mockResolvedValue(mockUsers);
 
@@ -238,7 +277,7 @@ describe('UserService', () => {
         username: 'testuser',
         email: 'test@example.com',
         roles: []
-      } as UserEntity;
+      } as unknown as UserEntity;
 
       vi.mocked(mockUserRepository.findOne).mockResolvedValue(mockUser);
 

+ 6 - 0
pnpm-lock.yaml

@@ -405,6 +405,9 @@ importers:
       '@d8d/shared-utils':
         specifier: workspace:*
         version: link:../shared-utils
+      '@hono/zod-openapi':
+        specifier: 1.0.2
+        version: 1.0.2(hono@4.8.5)(zod@4.1.12)
       bcrypt:
         specifier: ^6.0.0
         version: 6.0.0
@@ -415,6 +418,9 @@ importers:
         specifier: ^4.1.12
         version: 4.1.12
     devDependencies:
+      '@types/bcrypt':
+        specifier: ^6.0.0
+        version: 6.0.0
       '@vitest/coverage-v8':
         specifier: ^3.2.4
         version: 3.2.4(vitest@3.2.4(@types/debug@4.1.12)(@types/node@24.9.1)(happy-dom@18.0.1)(jiti@2.6.1)(jsdom@24.1.3)(lightningcss@1.30.2)(sass@1.93.2)(stylus@0.64.0)(terser@5.44.0)(tsx@4.20.6)(yaml@2.8.1))