# Story 006.018: 父子商品管理面板剩余测试修复

## Status
Ready for Development

## Story
**As a** 开发人员，
**I want** 修复GoodsParentChildPanel组件剩余的6个测试失败，
**so that** 所有17个测试都能通过，确保组件在标签页切换、按钮禁用状态、异步操作等待等方面的功能正确性

## Acceptance Criteria
1. GoodsParentChildPanel组件所有17个测试通过（当前11/17通过，6个失败）
2. 组件交互逻辑正确，无渲染问题
3. API模拟符合规范，使用统一的rpcClient模拟
4. 测试环境配置正确，无Mock配置不完整或过时问题
5. 文本匹配准确，无重复文本或找不到文本的问题
6. API客户端mock正确设置响应数据，与实际API响应结构一致

## Tasks / Subtasks
- [x] **分析剩余测试失败原因** (AC: 1, 2, 4, 5, 6)
  - [x] 运行GoodsParentChildPanel测试套件，识别剩余的6个测试失败
  - [x] 分析每个失败测试的具体原因（组件渲染问题、异步操作等待、API模拟问题等）
  - [x] 识别不符合API模拟规范的测试代码

- [ ] **修复标签页切换相关测试** (AC: 1, 2, 5)
  - [ ] 修复标签页切换后内容未显示的测试失败
  - [ ] 修复按钮禁用状态测试
  - [ ] 确保标签页切换逻辑与组件实际行为一致

- [ ] **修复异步操作等待测试** (AC: 1, 2)
  - [ ] 修复涉及异步操作等待的测试失败
  - [ ] 确保测试正确等待组件状态更新
  - [ ] 使用适当的测试等待方法（waitFor, findBy等）

- [ ] **验证API模拟规范一致性** (AC: 3, 4, 6)
  - [ ] 确保所有测试使用统一的rpcClient模拟
  - [ ] 验证模拟响应结构与实际API响应一致
  - [ ] 修复任何残留的直接模拟goodsClientManager的代码

- [ ] **运行完整测试验证** (AC: 1, 2, 3, 4, 5, 6)
  - [ ] 运行GoodsParentChildPanel所有17个测试，验证全部通过
  - [ ] 运行父子商品管理相关组件的完整测试套件
  - [ ] 验证测试覆盖率保持或提高

## Dev Notes

### 技术栈信息 [Source: architecture/tech-stack.md]
- **运行时**: Node.js 20.18.3
- **框架**: Hono 4.8.5 (Web框架和API路由，RPC类型安全)
- **前端框架**: React 19.1.0 (用户界面构建)
- **数据库**: PostgreSQL 17 (通过TypeORM进行数据持久化存储)
- **ORM**: TypeORM 0.3.25 (数据库操作抽象，实体管理)
- **样式**: Tailwind CSS 4.1.11 (原子化CSS框架)
- **状态管理**: React Query 5.83.0 (服务端状态管理)
- **测试框架**: Vitest 2.x (单元测试框架，更好的TypeORM支持)
- **API测试**: hono/testing (内置，API端点测试，更好的类型安全)

### 项目结构信息 [Source: architecture/source-tree.md]
- **包管理**: 使用pnpm workspace管理多包依赖关系
- **多租户架构**: 所有操作必须包含tenantId过滤，父子商品必须在同一租户下
- **商品管理UI包**: `packages/goods-management-ui-mt/` (`@d8d/goods-management-ui-mt`)
- **主要组件**: `src/components/GoodsParentChildPanel.tsx`
- **API客户端**: `packages/goods-management-ui-mt/src/api/goodsClient.ts`
- **共享UI组件**: `@d8d/shared-ui-components` (shadcn/ui组件库，46+基础组件)
- **测试目录**: `packages/goods-management-ui-mt/tests/unit/`

### API模拟规范要求 [Source: architecture/testing-strategy.md#API模拟规范]
- **统一模拟点**: 必须统一模拟`@d8d/shared-ui-components/utils/hc`中的`rpcClient`函数，而不是分别模拟各个客户端管理器
- **模拟优势**: 统一控制所有API调用，简化配置，天然支持跨UI包集成测试，维护性高
- **模拟策略**:
  1. 在测试文件顶部使用`vi.mock`统一模拟`rpcClient`函数
  2. 创建模拟的`rpcClient`函数，返回包含`$get`、`$post`、`$put`、`$delete`方法的模拟对象
  3. 使用`createMockResponse`辅助函数生成一致的API响应格式
  4. 在测试用例的`beforeEach`或具体测试中配置模拟响应
- **响应格式要求**: 模拟完整的Response对象，包含`status`、`ok`、`json()`等方法，确保与实际API响应结构一致
- **跨包支持**: 统一模拟天然支持多个UI包组件的API模拟，无需分别模拟客户端管理器

### 组件模拟策略要求
- **第三方库模拟**:
  - **必须使用真实实现**: `@tanstack/react-query`（React Query库），组件测试应使用真实的QueryClient和useQueryClient，确保状态管理逻辑正确
  - **允许模拟**: `sonner`（Toast通知库）、`lucide-react`（图标库）等UI库，可使用最小化模拟
- **子组件模拟**: 严格禁止模拟项目内部的子组件（如`BatchSpecCreatorInline`、`ChildGoodsList`），必须使用实际组件进行集成测试
  - 理由：子组件有自己的测试套件，模拟会掩盖组件间集成的真实行为，无法测试组件间的实际交互
  - 原则：所有子组件都应使用真实实现，确保集成测试的真实性
- **API客户端模拟**: 必须统一模拟`@d8d/shared-ui-components/utils/hc`中的`rpcClient`函数，而不是分别模拟各个客户端管理器
- **模拟粒度**: 模拟应集中在API层，UI组件层应尽可能使用真实组件
- **测试目的**: 单元测试应测试组件自身逻辑，集成测试应测试组件间协作，两者都应尽可能使用真实实现

### 测试失败分析（基于故事006.016）
根据故事006.016的记录，GoodsParentChildPanel当前状态：17个测试中11个通过，6个失败。需要进一步调试的问题可能包括：
1. 标签页切换后内容未显示
2. 按钮禁用测试失败
3. 异步操作等待问题
4. 组件渲染逻辑问题

### 技术约束
- **租户隔离**: 所有查询必须包含tenantId过滤，测试模拟响应必须包含租户相关字段
- **API兼容性**: 保持现有API行为不变，模拟响应必须与实际API响应结构一致
- **类型安全**: 使用TypeScript确保模拟响应与API类型兼容
- **可维护性**: 保持模拟响应与实际API响应结构一致，便于后续更新

### 文件变更
**待修改文件**:
1. `packages/goods-management-ui-mt/tests/unit/GoodsParentChildPanel.test.tsx` - 修复剩余的6个测试失败

**验证文件**:
1. `packages/goods-management-ui-mt/src/components/GoodsParentChildPanel.tsx` - 组件源码，确保测试与组件实际行为一致

## Testing
### 测试标准 [Source: architecture/testing-strategy.md]
- **测试文件位置**: `packages/goods-management-ui-mt/tests/unit/GoodsParentChildPanel.test.tsx`
- **测试框架**: Vitest + Testing Library + hono/testing + shared-test-util
- **测试要求**: 所有测试必须符合API模拟规范，使用统一的`rpcClient`模拟
- **测试模式**: 使用测试数据工厂模式，避免硬编码测试数据

### 测试策略要求
- **单元测试**: 验证单个组件的正确性，必须覆盖所有交互和状态变化
- **错误测试**: 必须测试各种错误场景（网络错误、验证错误、服务器错误等）
- **覆盖率要求**: 测试覆盖率不应低于现有水平，关键组件应达到80%+覆盖率
- **验证标准**: 所有测试必须通过，无flaky tests，测试执行稳定可靠

### 测试验证步骤
1. **运行单个组件测试**: 验证修复后的测试通过率
2. **运行完整测试套件**: 验证所有相关组件测试通过
3. **检查覆盖率报告**: 确保测试覆盖率保持或提高
4. **运行多次测试**: 验证测试稳定性，无随机失败

## Change Log
| Date | Version | Description | Author |
|------|---------|-------------|--------|
| 2025-12-15 | 1.0 | 初始故事创建，从故事006.016拆分 | John (Product Manager) |

## Dev Agent Record
*此部分由开发代理在实现过程中填写*

### Agent Model Used
Claude Sonnet

### Debug Log References
1. 运行测试发现前6个测试通过，剩余测试卡住或超时
2. 分析标签页切换测试：组件渲染正常，但点击后BatchSpecCreatorInline组件未显示
3. BatchSpecCreatorInline独立测试通过，说明组件本身正常
4. 怀疑Tabs切换逻辑或模拟配置问题

### Completion Notes List
1. 已完成任务1：分析剩余测试失败原因，识别6个测试失败
2. 任务2进行中：修复标签页切换相关测试，遇到测试环境问题
3. 已尝试多种调试方法，测试仍然超时
4. 需要进一步调查测试环境配置或模拟设置

### File List
1. packages/goods-management-ui-mt/tests/unit/GoodsParentChildPanel.test.tsx - 修改测试添加调试代码
2. packages/goods-management-ui-mt/src/components/GoodsParentChildPanel.tsx - 添加调试日志
3. docs/stories/006.018.goods-parent-child-panel-remaining-test-fixes.story.md - 更新任务状态

## QA Results
*此部分由QA代理在审查完成后填写*