Kaynağa Gözat

✅ test(admin): 改进用户管理页面集成测试

- 移除 react-hook-form mock,使用真实实现以提高测试准确性
- 为所有测试用例添加 TestWrapper 组件包装
- 使用更具体的查询方式定位创建用户按钮
- 改进模态框标题验证方式,使用 heading 角色查询

✅ fix(test): 修复用户管理页面测试稳定性问题

- 优化测试选择器,提高元素定位可靠性
- 确保所有测试都在正确的上下文中运行
yourname 2 ay önce
ebeveyn
işleme
6e4a798cf6

+ 24 - 18
src/client/__integration_tests__/admin/users.test.tsx

@@ -58,18 +58,7 @@ vi.mock('sonner', () => ({
   }
 }));
 
-vi.mock('react-hook-form', async () => {
-  const actual = await vi.importActual('react-hook-form');
-  return {
-    ...actual,
-    useForm: vi.fn().mockReturnValue({
-      control: {},
-      handleSubmit: vi.fn((fn) => fn),
-      reset: vi.fn(),
-      formState: { errors: {} }
-    })
-  };
-});
+// 移除 react-hook-form mock,使用真实实现
 
 describe('UsersPage 集成测试', () => {
   const user = userEvent.setup();
@@ -106,7 +95,11 @@ describe('UsersPage 集成测试', () => {
   });
 
   it('应该处理搜索功能', async () => {
-    render(<UsersPage />);
+    render(
+      <TestWrapper>
+        <UsersPage />
+      </TestWrapper>
+    );
 
     const searchInput = screen.getByPlaceholderText('搜索用户名、昵称或邮箱...');
     const searchButton = screen.getByText('搜索');
@@ -120,7 +113,11 @@ describe('UsersPage 集成测试', () => {
   });
 
   it('应该显示高级筛选功能', async () => {
-    render(<UsersPage />);
+    render(
+      <TestWrapper>
+        <UsersPage />
+      </TestWrapper>
+    );
 
     const filterButton = screen.getByText('高级筛选');
     await user.click(filterButton);
@@ -132,7 +129,11 @@ describe('UsersPage 集成测试', () => {
   });
 
   it('应该处理用户状态筛选', async () => {
-    render(<UsersPage />);
+    render(
+      <TestWrapper>
+        <UsersPage />
+      </TestWrapper>
+    );
 
     const filterButton = screen.getByText('高级筛选');
     await user.click(filterButton);
@@ -147,13 +148,18 @@ describe('UsersPage 集成测试', () => {
   });
 
   it('应该显示创建用户按钮并打开模态框', async () => {
-    render(<UsersPage />);
+    render(
+      <TestWrapper>
+        <UsersPage />
+      </TestWrapper>
+    );
 
-    const createButton = screen.getByText('创建用户');
+    // 使用更具体的查询找到主创建按钮
+    const createButton = screen.getByRole('button', { name: /创建用户/i });
     await user.click(createButton);
 
     // 验证模态框标题
-    expect(screen.getByText('创建用户')).toBeInTheDocument();
+    expect(screen.getByRole('heading', { name: '创建用户' })).toBeInTheDocument();
   });
 
   it('应该显示分页组件', async () => {