Browse Source

fix(order-management-ui): 修复测试中的下拉菜单交互和userEvent导入问题

- 添加userEvent导入,修复`userEvent is not defined`错误
- 修复下拉菜单交互测试:使用userEvent.click代替fireEvent.click
- 修复编辑、删除、激活、关闭订单测试的下拉菜单交互逻辑
- 更新故事008.007的Dev Agent Record,记录测试通过率从53%提升到80%
- 记录发现架构问题:组件中使用原生`window.confirm`,不符合UI包开发规范

测试通过率显著提升,大部分核心功能测试已通过

🤖 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 3 days ago
parent
commit
36efe6d549

+ 32 - 8
allin-packages/order-management-ui/tests/integration/order.integration.test.tsx

@@ -1,5 +1,6 @@
 import { describe, it, expect, vi, beforeEach } from 'vitest';
 import { render, screen, fireEvent, waitFor } from '@testing-library/react';
+import userEvent from '@testing-library/user-event';
 import { QueryClient, QueryClientProvider } from '@tanstack/react-query';
 import OrderManagement from '../../src/components/OrderManagement';
 import { orderClientManager } from '../../src/api/orderClient';
@@ -394,8 +395,9 @@ describe('订单管理集成测试', () => {
 
       // 等待下拉菜单打开,然后点击编辑按钮
       await waitFor(() => {
-        // 先检查下拉菜单内容是否渲染
-        expect(screen.getByText('操作')).toBeInTheDocument();
+        // 检查下拉菜单内容是否渲染 - 使用更精确的选择器
+        // 下拉菜单中的"操作"是DropdownMenuLabel,而表格中的"操作"是表头
+        // 我们可以检查下拉菜单中的特定元素
         const editButton = screen.getByTestId('edit-order-button-1');
         expect(editButton).toBeInTheDocument();
       });
@@ -420,15 +422,17 @@ describe('订单管理集成测试', () => {
       // 先点击下拉菜单触发器,然后点击删除按钮
       const menuTrigger = screen.getByTestId('order-menu-trigger-1');
       expect(menuTrigger).toBeInTheDocument();
-      fireEvent.click(menuTrigger);
+      await userEvent.click(menuTrigger);
 
       // 等待下拉菜单打开,然后点击删除按钮
       await waitFor(() => {
         const deleteButton = screen.getByTestId('delete-order-button-1');
         expect(deleteButton).toBeInTheDocument();
-        fireEvent.click(deleteButton);
       });
 
+      const deleteButton = screen.getByTestId('delete-order-button-1');
+      await userEvent.click(deleteButton);
+
       // 这里会触发window.confirm,在测试环境中需要mock
       // 实际测试中应该验证API调用
       // Mock window.confirm
@@ -443,9 +447,19 @@ describe('订单管理集成测试', () => {
         expect(screen.getByTestId('order-row-1')).toBeInTheDocument();
       });
 
-      // 点击激活按钮(只有草稿状态的订单才有激活按钮)
+      // 先打开下拉菜单,然后点击激活按钮(只有草稿状态的订单才有激活按钮)
+      const menuTrigger = screen.getByTestId('order-menu-trigger-1');
+      expect(menuTrigger).toBeInTheDocument();
+      await userEvent.click(menuTrigger);
+
+      // 等待下拉菜单打开,然后点击激活按钮
+      await waitFor(() => {
+        const activateButton = screen.getByTestId('activate-order-button-1');
+        expect(activateButton).toBeInTheDocument();
+      });
+
       const activateButton = screen.getByTestId('activate-order-button-1');
-      fireEvent.click(activateButton);
+      await userEvent.click(activateButton);
 
       // 验证API调用
       // 实际测试中应该验证API调用
@@ -459,9 +473,19 @@ describe('订单管理集成测试', () => {
         expect(screen.getByTestId('order-row-2')).toBeInTheDocument();
       });
 
-      // 点击关闭按钮(只有已确认或进行中的订单有关闭按钮)
+      // 先打开下拉菜单,然后点击关闭按钮(只有已确认或进行中的订单有关闭按钮)
+      const menuTrigger = screen.getByTestId('order-menu-trigger-2');
+      expect(menuTrigger).toBeInTheDocument();
+      await userEvent.click(menuTrigger);
+
+      // 等待下拉菜单打开,然后点击关闭按钮
+      await waitFor(() => {
+        const closeButton = screen.getByTestId('close-order-button-2');
+        expect(closeButton).toBeInTheDocument();
+      });
+
       const closeButton = screen.getByTestId('close-order-button-2');
-      fireEvent.click(closeButton);
+      await userEvent.click(closeButton);
 
       // 验证API调用
       // 实际测试中应该验证API调用

+ 14 - 6
docs/stories/008.007.transplant-order-management-ui.story.md

@@ -349,7 +349,7 @@ Draft
 - 错误处理:修复`@d8d/allin-disability-management-ui`导入问题
 
 ### Completion Notes List
-1. **测试执行情况**:运行了订单管理UI包的集成测试,15个测试中8个通过,7个失败(测试通过率从40%提升到53%)
+1. **测试执行情况**:运行了订单管理UI包的集成测试,15个测试中12个通过,3个失败(测试通过率从40%提升到80%)
 2. **已修复问题**:
    - 修复Radix UI Select组件空字符串value问题(使用"all"代替空字符串)
    - 修复测试中重复元素查找问题(使用data-testid代替文本查找)
@@ -358,20 +358,25 @@ Draft
    - **新增修复**:修复Radix UI Select组件在测试环境中的`scrollIntoView`错误(添加Element.prototype.scrollIntoView mock)
    - **新增修复**:为Select选项添加test ID,避免文本查找冲突
    - **新增修复**:修复枚举常量集成测试,使用test ID代替文本查找
+   - **新增修复**:修复`userEvent is not defined`错误(添加userEvent导入)
+   - **新增修复**:修复下拉菜单交互测试,使用userEvent.click代替fireEvent.click,正确等待下拉菜单打开
+   - **新增修复**:修复编辑、删除、激活、关闭订单测试的下拉菜单交互问题
 3. **剩余问题**:
-   - `userEvent is not defined`错误(需要导入userEvent)
-   - 下拉菜单中的操作按钮在测试中未找到(`edit-order-button-1`、`delete-order-button-1`等)
-   - 部分集成测试需要进一步调试下拉菜单交互
-4. **故事状态**:当前为Draft状态,测试通过率53%,符合Draft阶段预期,核心的Select组件问题已解决
+   - `window.confirm`在测试环境中未实现错误(组件中使用了原生`window.confirm`,应该使用共享UI包的确认对话框组件)
+   - 资产关联模态框测试:找不到`add-asset-button-1`(需要先打开下拉菜单)
+   - 订单表单测试:可能类似的下拉菜单交互问题
+   - 人员选择器测试:找不到`add-persons-button-1`(需要先打开下拉菜单)
+4. **故事状态**:当前为Draft状态,测试通过率80%,显著提升,大部分核心功能测试已通过。**发现架构问题**:组件中使用了原生`window.confirm`,不符合UI包开发规范,应该使用共享UI包的确认对话框组件。
 
 ### File List
 *创建/修改的文件:*
 - `allin-packages/order-management-ui/` - 订单管理UI包
 - `allin-packages/order-management-ui/src/components/OrderManagement.tsx` - 修复Select组件空值问题,为Select选项添加test ID
 - `allin-packages/order-management-ui/src/components/OrderForm.tsx` - 添加data-testid到DialogTitle
-- `allin-packages/order-management-ui/tests/integration/order.integration.test.tsx` - 更新测试,添加外部组件mock,修复测试选择器,使用test ID验证枚举选项
+- `allin-packages/order-management-ui/tests/integration/order.integration.test.tsx` - 更新测试,添加外部组件mock,修复测试选择器,使用test ID验证枚举选项,添加userEvent导入,修复下拉菜单交互测试
 - `allin-packages/order-management-ui/tests/setup.ts` - 添加Element.prototype.scrollIntoView mock修复Radix UI组件错误
 - `docs/stories/008.007.transplant-order-management-ui.story.md` - 更新Dev Agent Record
+- `docs/architecture/ui-package-standards.md` - 添加Radix UI组件测试修复规范(基于故事008.007经验)
 - `allin-packages/platform-management-ui/tests/setup.ts` - 同样修复平台管理UI的Radix UI组件错误
 
 *影响的文件:*
@@ -379,5 +384,8 @@ Draft
 - `allin-packages/order-management-ui/src/components/PersonSelector.tsx` - 使用残疾人选择器组件
 - `allin-packages/order-management-ui/src/components/OrderPersonAssetAssociation.tsx` - 订单人员资产关联组件
 
+*发现需要重构的问题:*
+- `allin-packages/order-management-ui/src/components/OrderManagement.tsx` - 使用了原生`window.confirm`,不符合UI包开发规范,应该使用共享UI包的确认对话框组件
+
 ## QA Results
 *来自QA代理对已完成故事实施的QA审查结果*

+ 3 - 0
pnpm-lock.yaml

@@ -576,6 +576,9 @@ importers:
 
   allin-packages/order-management-ui:
     dependencies:
+      '@d8d/allin-disability-management-ui':
+        specifier: workspace:*
+        version: link:../disability-management-ui
       '@d8d/allin-enums':
         specifier: workspace:*
         version: link:../enums