Browse Source

fix(salary-ui): 修复测试中的API客户端模拟问题

- 修复salaryClientManager模拟结构,直接导出mock对象而不是嵌套结构
- 修复表格渲染测试,等待数据加载完成后再检查表格列
- 统一API路径名称,将getByProvinceCity改为byProvinceCity以匹配测试使用

测试通过率从0/17提高到8/17,修复了主要的模拟问题

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 1 month ago
parent
commit
8c4b6a278f

+ 8 - 6
allin-packages/salary-management-ui/tests/integration/salary-selector.integration.test.tsx

@@ -62,13 +62,14 @@ vi.mock('../../src/api/salaryClient', () => {
     }
     }
   };
   };
 
 
+  const mockClientManager = {
+    get: vi.fn(() => mockSalaryClient),
+    reset: vi.fn()
+  };
+
   return {
   return {
-    salaryClientManager: {
-      getInstance: vi.fn(() => ({
-        get: vi.fn(() => mockSalaryClient),
-        reset: vi.fn()
-      }))
-    }
+    salaryClientManager: mockClientManager,
+    salaryClient: mockSalaryClient
   };
   };
 });
 });
 
 
@@ -86,6 +87,7 @@ describe('薪资选择器集成测试', () => {
       },
       },
     });
     });
     mockOnChange = vi.fn();
     mockOnChange = vi.fn();
+    // 从模拟中获取mock客户端
     mockSalaryClient = salaryClientManager.get();
     mockSalaryClient = salaryClientManager.get();
     vi.clearAllMocks();
     vi.clearAllMocks();
   });
   });

+ 19 - 16
allin-packages/salary-management-ui/tests/integration/salary.integration.test.tsx

@@ -159,13 +159,14 @@ vi.mock('../../src/api/salaryClient', () => {
     }
     }
   };
   };
 
 
+  const mockClientManager = {
+    get: vi.fn(() => mockSalaryClient),
+    reset: vi.fn()
+  };
+
   return {
   return {
-    salaryClientManager: {
-      getInstance: vi.fn(() => ({
-        get: vi.fn(() => mockSalaryClient),
-        reset: vi.fn()
-      }))
-    }
+    salaryClientManager: mockClientManager,
+    salaryClient: mockSalaryClient
   };
   };
 });
 });
 
 
@@ -203,18 +204,20 @@ describe('薪资管理集成测试', () => {
     expect(screen.getByText('搜索')).toBeInTheDocument();
     expect(screen.getByText('搜索')).toBeInTheDocument();
     expect(screen.getByText('添加薪资')).toBeInTheDocument();
     expect(screen.getByText('添加薪资')).toBeInTheDocument();
 
 
-    // 等待数据加载
+    // 等待数据加载和表格渲染
     await waitFor(() => {
     await waitFor(() => {
-      expect(screen.getByText('北京市')).toBeInTheDocument();
-      expect(screen.getByText('上海市')).toBeInTheDocument();
+      // 检查表格数据(使用getAllByText获取第二个匹配项,即表格中的)
+      const beijingElements = screen.getAllByText('北京市');
+      expect(beijingElements.length).toBeGreaterThan(1); // 至少有一个在表格中
+      const shanghaiElements = screen.getAllByText('上海市');
+      expect(shanghaiElements.length).toBeGreaterThan(1); // 至少有一个在表格中
+      // 检查表格列
+      expect(screen.getByText('ID')).toBeInTheDocument();
+      expect(screen.getByText('省份')).toBeInTheDocument();
+      expect(screen.getByText('城市')).toBeInTheDocument();
+      expect(screen.getByText('基本工资')).toBeInTheDocument();
+      expect(screen.getByText('总薪资')).toBeInTheDocument();
     });
     });
-
-    // 检查表格列
-    expect(screen.getByText('ID')).toBeInTheDocument();
-    expect(screen.getByText('省份')).toBeInTheDocument();
-    expect(screen.getByText('城市')).toBeInTheDocument();
-    expect(screen.getByText('基本工资')).toBeInTheDocument();
-    expect(screen.getByText('总薪资')).toBeInTheDocument();
   });
   });
 
 
   it('应该显示薪资列表数据', async () => {
   it('应该显示薪资列表数据', async () => {