Pārlūkot izejas kodu

拆分故事006.016并更新史诗006:父子商品管理测试修复工作拆分为三个新故事

🤖 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 mēnesi atpakaļ
vecāks
revīzija
b1a869b763

+ 56 - 7
docs/prd/epic-006-parent-child-goods-multi-spec-support.md

@@ -1,9 +1,9 @@
 # 史诗006:父子商品多规格支持 - 棕地增强
 
 ## 史诗状态
-**进度**: 14/17 故事完成 (82.4%)
-**最近更新**: 2025-12-15 (故事17添加:小程序商品卡片多规格支持)
-**当前状态**: 故事1-15已完成,故事13、16待开始,故事17待开始
+**进度**: 14/20 故事完成 (70.0%)
+**最近更新**: 2025-12-15 (故事18-20添加:父子商品管理测试修复拆分)
+**当前状态**: 故事1-12、14-15已完成,故事13、17-20待开始,故事16已拆分
 
 ### 完成概览
 - ✅ **故事1**: 管理后台父子商品配置功能 (已完成)
@@ -21,8 +21,11 @@
 - ⏳ **故事13**: 父子商品列表缓存自动刷新优化 (待开始)
 - ✅ **故事14**: 订单提交快照商品名称优化 (已完成)
 - ✅ **故事15**: 商品管理列表父子商品筛选优化 (已完成)
-- ⏳ **故事16**: 父子商品管理界面测试用例修复与API模拟规范化 (待开始)
+- 🔀 **故事16**: 父子商品管理界面测试用例修复与API模拟规范化 (已拆分)
 - ⏳ **故事17**: 小程序商品卡片多规格支持 (待开始)
+- ⏳ **故事18**: 父子商品管理面板剩余测试修复 (待开始)
+- ⏳ **故事19**: 批量创建组件测试修复与API模拟规范化 (待开始)
+- ⏳ **故事20**: 商品管理集成测试API模拟规范化 (待开始)
 
 ## 史诗目标
 新增父子商品多规格支持功能,在商品添加购物车或立即购买时,能同时支持单规格和多规格选择,以子商品作为多规格选项,并支持手动指定子商品。
@@ -71,8 +74,10 @@
   12. ✅ 订单提交快照商品名称包含完整的商品和规格信息(故事14已实现)
   13. ✅ 管理员能在商品管理列表方便筛选父子商品,默认视图整洁(故事15已实现)
   14. ⏳ 父子商品管理相关组件的缓存自动刷新,提升用户体验(故事13待实现)
-  15. ⏳ 父子商品管理界面的测试用例全部通过,符合API模拟规范,为后续开发提供可靠测试保障(故事16待实现)
-  16. ⏳ 用户能在商品列表页面(首页、商品列表页、搜索结果页)的商品卡片中直接选择规格并添加到购物车(故事17待实现)
+  15. ⏳ 用户能在商品列表页面(首页、商品列表页、搜索结果页)的商品卡片中直接选择规格并添加到购物车(故事17待实现)
+  16. ⏳ 父子商品管理面板所有测试通过,组件交互逻辑正确(故事18待实现)
+  17. ⏳ 批量创建组件测试全部通过,API模拟符合规范(故事19待实现)
+  18. ⏳ 商品管理集成测试API模拟规范化,跨包集成测试正确工作(故事20待实现)
 
 ## 设计决策
 
@@ -646,6 +651,50 @@
        - 创建`mini/tests/unit/components/goods-card/goods-card.test.tsx` - 商品卡片多规格支持单元测试
        - 更新现有页面测试,验证多规格商品添加购物车功能
 
+18. **故事18:父子商品管理面板剩余测试修复** ⏳ **待开始**
+    - **问题背景**:故事16已修复了部分测试用例,但GoodsParentChildPanel组件仍有6个测试失败需要修复
+    - **解决方案**:修复剩余的6个测试失败,确保组件在标签页切换、按钮禁用状态、异步操作等待等方面的功能正确性
+    - **功能需求**:
+      - 修复GoodsParentChildPanel剩余的6个测试失败
+      - 确保组件在各种交互场景下的正确行为
+      - 保持API模拟规范一致性,使用统一的rpcClient模拟
+    - **验收标准**:
+      - GoodsParentChildPanel所有17个测试通过
+      - 组件交互逻辑正确,无渲染问题
+      - API模拟符合规范,测试环境配置正确
+    - **文件变更**:
+      - `packages/goods-management-ui-mt/tests/unit/GoodsParentChildPanel.test.tsx` - 修复剩余测试失败
+
+19. **故事19:批量创建组件测试修复与API模拟规范化** ⏳ **待开始**
+    - **问题背景**:BatchSpecCreatorInline组件有5个测试失败,BatchSpecCreator组件需要更新API模拟规范
+    - **解决方案**:修复BatchSpecCreatorInline的表单验证测试失败,并更新BatchSpecCreator组件的API模拟规范
+    - **功能需求**:
+      - 修复BatchSpecCreatorInline剩余的5个测试失败(主要涉及表单验证和toast错误消息)
+      - 更新BatchSpecCreator.test.tsx以符合API模拟规范
+      - 确保所有表单验证逻辑正确触发toast错误提示
+    - **验收标准**:
+      - BatchSpecCreatorInline所有23个测试通过
+      - BatchSpecCreator组件测试符合API模拟规范
+      - 表单验证错误正确触发toast提示
+      - API模拟使用统一的rpcClient模拟
+    - **文件变更**:
+      - `packages/goods-management-ui-mt/tests/unit/BatchSpecCreatorInline.test.tsx` - 修复表单验证测试
+      - `packages/goods-management-ui-mt/tests/unit/BatchSpecCreator.test.tsx` - 更新API模拟规范
+
+20. **故事20:商品管理集成测试API模拟规范化** ⏳ **待开始**
+    - **问题背景**:商品管理集成测试需要更新API模拟规范,确保跨包集成测试正确配置API响应
+    - **解决方案**:更新goods-management.integration.test.tsx集成测试文件,使用统一的rpcClient模拟
+    - **功能需求**:
+      - 更新goods-management.integration.test.tsx以符合API模拟规范
+      - 确保集成测试中的API模拟正确配置响应数据
+      - 支持多个UI包组件的API模拟配置
+    - **验收标准**:
+      - goods-management.integration.test.tsx集成测试符合API模拟规范
+      - 所有集成测试通过,API模拟正确工作
+      - 跨包集成测试中的API响应配置正确
+    - **文件变更**:
+      - `packages/goods-management-ui-mt/tests/integration/goods-management.integration.test.tsx` - 更新API模拟规范
+
 ## 兼容性要求
 - [x] 现有API保持向后兼容,新增端点不影响现有功能(故事2、4、7已确保)
 - [x] 数据库schema向后兼容,利用现有spuId字段(故事1-4已实现)
@@ -659,7 +708,7 @@
 - **回滚计划**:移除新增API端点,恢复原有逻辑,保持多租户完整性
 
 ## 完成定义
-- [x] 所有故事完成,验收标准满足(14/17完成,故事13、16、17待实现
+- [x] 所有故事完成,验收标准满足(14/20完成,故事13、17-20待实现,故事16已拆分
 - [x] 现有功能通过测试验证(故事1-15测试通过)
 - [x] API变更经过兼容性测试(故事2-15 API测试通过)
 - [x] 多租户隔离机制保持完整(故事1-15已实现)

+ 8 - 1
docs/stories/006.016.parent-child-goods-management-test-fix-api-mock-normalization.story.md

@@ -1,7 +1,14 @@
 # Story 006.016: 父子商品管理界面测试用例修复与API模拟规范化
 
 ## Status
-In Progress
+Archived (Split)
+
+**说明**: 本故事的工作已拆分为以下三个独立故事:
+- **故事006.018**: 父子商品管理面板剩余测试修复
+- **故事006.019**: 批量创建组件测试修复与API模拟规范化
+- **故事006.020**: 商品管理集成测试API模拟规范化
+
+原故事中的任务已完成部分保留作为历史记录,剩余工作由新故事继续完成。
 
 ## Story
 **As a** 开发人员,

+ 9 - 2
docs/stories/006.017.mini-goods-card-multi-spec-support.story.md

@@ -43,7 +43,7 @@ Ready for Review
   - [x] 更新`mini/src/pages/search-result/index.tsx`搜索结果页,确保传递正确的商品数据
   - [x] 更新`mini/src/components/goods-list/index.tsx`商品列表组件,确保数据传递正确
 
-- [ ] **编写单元测试** (AC: 7)
+- [x] **编写单元测试** (AC: 7)
   - [x] 创建`mini/tests/unit/components/goods-card/goods-card.test.tsx`测试文件
   - [x] 测试单规格商品直接添加到购物车场景
   - [x] 测试多规格商品弹出规格选择器场景
@@ -51,13 +51,18 @@ Ready for Review
   - [x] 测试父子商品关系正确记录场景
   - [x] 测试商品卡片在不同页面的数据传递正确性
 
-- [ ] **集成测试和验证** (AC: 1, 2, 3, 4, 5, 6)
+- [x] **集成测试和验证** (AC: 1, 2, 3, 4, 5, 6)
   - [x] 运行现有测试套件,确保无回归问题
   - [x] 手动测试首页商品卡片的多规格支持
   - [x] 手动测试商品列表页的多规格支持
   - [x] 手动测试搜索结果页的多规格支持
   - [x] 验证购物车中父子商品关系正确性
 
+- [x] **修复多规格商品加入购物车成功但实际未添加的问题** (AC: 2, 4)
+  - [x] 分析商品卡片和购物车上下文之间的ID类型不匹配问题
+  - [x] 修复商品卡片ID类型转换问题,确保子商品ID正确传递
+  - [x] 测试修复后的功能,验证多规格商品能正确添加到购物车
+
 ## Dev Notes
 
 ### 技术栈信息 [Source: architecture/tech-stack.md]
@@ -268,6 +273,8 @@ Claude Sonnet
 - 创建商品卡片单元测试文件,覆盖单规格和多规格场景
 - 更新search-result页面测试的useRouter模拟问题
 - 状态更新为Ready for Review,等待测试修复完成
+- 修复多规格商品加入购物车成功但实际未添加的问题:分析并修复商品卡片和购物车上下文之间的ID类型不匹配问题,确保子商品ID正确传递
+- 对照商品详情页加入购物车逻辑,确保一致性:规格选择后的数据传递、parentGoodsId计算逻辑与商品详情页保持一致
 
 ### File List
 1. `mini/src/components/goods-card/index.tsx` - 商品卡片组件,添加多规格支持

+ 149 - 0
docs/stories/006.018.goods-parent-child-panel-remaining-test-fixes.story.md

@@ -0,0 +1,149 @@
+# 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
+- [ ] **分析剩余测试失败原因** (AC: 1, 2, 4, 5, 6)
+  - [ ] 运行GoodsParentChildPanel测试套件,识别剩余的6个测试失败
+  - [ ] 分析每个失败测试的具体原因(组件渲染问题、异步操作等待、API模拟问题等)
+  - [ ] 识别不符合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
+无
+
+### Completion Notes List
+*待开发代理填写*
+
+### File List
+*待开发代理填写*
+
+## QA Results
+*此部分由QA代理在审查完成后填写*

+ 162 - 0
docs/stories/006.019.batch-spec-creator-test-fixes-api-mock-normalization.story.md

@@ -0,0 +1,162 @@
+# Story 006.019: 批量创建组件测试修复与API模拟规范化
+
+## Status
+Ready for Development
+
+## Story
+**As a** 开发人员,
+**I want** 修复BatchSpecCreatorInline组件的5个测试失败,并更新BatchSpecCreator组件的API模拟规范,
+**so that** 所有测试通过,表单验证逻辑正确触发toast错误提示,API模拟符合统一规范
+
+## Acceptance Criteria
+1. BatchSpecCreatorInline组件所有23个测试通过(当前18/23通过,5个失败)
+2. BatchSpecCreator组件测试符合API模拟规范
+3. 表单验证错误正确触发toast错误提示
+4. API模拟使用统一的rpcClient模拟,符合API模拟规范
+5. 测试环境配置正确,无Mock配置不完整或过时问题
+6. 表单验证逻辑与组件实际行为一致
+
+## Tasks / Subtasks
+- [ ] **分析BatchSpecCreatorInline测试失败原因** (AC: 1, 3, 6)
+  - [ ] 运行BatchSpecCreatorInline测试套件,识别5个失败的测试
+  - [ ] 分析表单验证和toast错误消息测试失败的具体原因
+  - [ ] 检查React Hook Form验证错误结构、toast模拟配置、表单提交流程问题
+
+- [ ] **修复表单验证测试** (AC: 1, 3, 6)
+  - [ ] 修复"应该验证价格不能为负数"测试(toast.error未调用)
+  - [ ] 修复"应该验证成本价不能为负数"测试(toast.error未调用)
+  - [ ] 修复"应该验证库存不能为负数"测试(toast.error未调用)
+  - [ ] 修复"应该验证多个错误字段"测试(toast.error未调用)
+  - [ ] 修复"应该测试完整的用户交互流程"测试(规格名称更新问题)
+
+- [ ] **更新BatchSpecCreator组件API模拟规范** (AC: 2, 4, 5)
+  - [ ] 分析BatchSpecCreator.test.tsx当前API模拟实现
+  - [ ] 按照API模拟规范重构,使用统一的rpcClient模拟
+  - [ ] 移除直接模拟goodsClientManager的残余代码
+  - [ ] 确保模拟响应结构与实际API响应一致
+
+- [ ] **验证API模拟规范一致性** (AC: 2, 4, 5)
+  - [ ] 确保两个组件测试都使用统一的rpcClient模拟
+  - [ ] 验证模拟响应结构与实际API响应一致
+  - [ ] 修复任何残留的直接模拟goodsClientManager的代码
+
+- [ ] **运行完整测试验证** (AC: 1, 2, 3, 4, 5, 6)
+  - [ ] 运行BatchSpecCreatorInline所有23个测试,验证全部通过
+  - [ ] 运行BatchSpecCreator组件测试,验证API模拟规范符合要求
+  - [ ] 运行父子商品管理相关组件的完整测试套件
+  - [ ] 验证测试覆盖率保持或提高
+
+## 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/BatchSpecCreatorInline.tsx`
+  - `src/components/BatchSpecCreator.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库,可使用最小化模拟
+- **子组件模拟**: 严格禁止模拟项目内部的子组件,必须使用实际组件进行集成测试
+- **API客户端模拟**: 必须统一模拟`@d8d/shared-ui-components/utils/hc`中的`rpcClient`函数,而不是分别模拟各个客户端管理器
+
+### 测试失败分析(基于故事006.016)
+根据故事006.016的记录,BatchSpecCreatorInline当前状态:23个测试中18个通过,5个失败。失败的测试包括:
+1. 应该验证价格不能为负数(toast.error未调用)
+2. 应该验证成本价不能为负数(toast.error未调用)
+3. 应该验证库存不能为负数(toast.error未调用)
+4. 应该验证多个错误字段(toast.error未调用)
+5. 应该测试完整的用户交互流程(规格名称更新问题)
+
+**问题分析**: 表单验证错误似乎没有正确触发toast.error调用,可能原因包括:
+- React Hook Form验证错误结构问题
+- toast模拟配置问题
+- 表单提交流程问题
+- 组件状态管理问题
+
+### 技术约束
+- **租户隔离**: 所有查询必须包含tenantId过滤,测试模拟响应必须包含租户相关字段
+- **API兼容性**: 保持现有API行为不变,模拟响应必须与实际API响应结构一致
+- **类型安全**: 使用TypeScript确保模拟响应与API类型兼容
+- **可维护性**: 保持模拟响应与实际API响应结构一致,便于后续更新
+
+### 文件变更
+**待修改文件**:
+1. `packages/goods-management-ui-mt/tests/unit/BatchSpecCreatorInline.test.tsx` - 修复表单验证测试
+2. `packages/goods-management-ui-mt/tests/unit/BatchSpecCreator.test.tsx` - 更新API模拟规范
+
+**验证文件**:
+1. `packages/goods-management-ui-mt/src/components/BatchSpecCreatorInline.tsx` - 组件源码
+2. `packages/goods-management-ui-mt/src/components/BatchSpecCreator.tsx` - 组件源码
+
+## Testing
+### 测试标准 [Source: architecture/testing-strategy.md]
+- **测试文件位置**: `packages/goods-management-ui-mt/tests/unit/`目录下
+- **单元测试位置**: `tests/unit/**/*.test.{ts,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
+无
+
+### Completion Notes List
+*待开发代理填写*
+
+### File List
+*待开发代理填写*
+
+## QA Results
+*此部分由QA代理在审查完成后填写*

+ 146 - 0
docs/stories/006.020.goods-management-integration-test-api-mock-normalization.story.md

@@ -0,0 +1,146 @@
+# Story 006.020: 商品管理集成测试API模拟规范化
+
+## Status
+Ready for Development
+
+## Story
+**As a** 开发人员,
+**I want** 更新goods-management.integration.test.tsx集成测试文件,使用统一的rpcClient模拟,
+**so that** 集成测试符合API模拟规范,跨包集成测试正确配置API响应,为父子商品管理功能提供可靠的集成测试保障
+
+## Acceptance Criteria
+1. goods-management.integration.test.tsx集成测试符合API模拟规范
+2. 所有集成测试通过,API模拟正确工作
+3. 跨包集成测试中的API响应配置正确
+4. 支持多个UI包组件的API模拟配置
+5. 测试环境配置正确,无Mock配置不完整或过时问题
+6. API模拟使用统一的rpcClient模拟,而不是分别模拟各个客户端管理器
+
+## Tasks / Subtasks
+- [ ] **分析当前集成测试API模拟实现** (AC: 1, 4, 5, 6)
+  - [ ] 分析goods-management.integration.test.tsx当前的API模拟实现
+  - [ ] 识别不符合API模拟规范的代码(直接模拟goodsClientManager等)
+  - [ ] 分析跨包集成测试的API响应配置需求
+
+- [ ] **按照API模拟规范重构集成测试** (AC: 1, 2, 3, 4, 6)
+  - [ ] 使用vi.mock统一模拟`@d8d/shared-ui-components/utils/hc`中的rpcClient函数
+  - [ ] 创建模拟的rpcClient函数,返回包含`$get`、`$post`、`$put`、`$delete`方法的模拟对象
+  - [ ] 使用createMockResponse辅助函数生成一致的API响应格式
+  - [ ] 在测试用例的beforeEach或具体测试中配置模拟响应
+  - [ ] 支持多个UI包组件的API模拟配置
+
+- [ ] **配置跨包集成测试API响应** (AC: 2, 3, 4)
+  - [ ] 配置商品管理UI包组件的API响应
+  - [ ] 配置其他相关UI包组件的API响应(如需要)
+  - [ ] 确保集成测试中的API模拟正确工作
+
+- [ ] **验证集成测试功能** (AC: 2, 3, 5)
+  - [ ] 运行goods-management.integration.test.tsx所有集成测试
+  - [ ] 验证测试通过,API模拟正确工作
+  - [ ] 验证跨包集成测试中的API响应配置正确
+
+- [ ] **运行完整测试验证** (AC: 1, 2, 3, 4, 5, 6)
+  - [ ] 运行父子商品管理相关组件的完整测试套件
+  - [ ] 验证所有集成测试通过
+  - [ ] 检查测试覆盖率保持或提高
+  - [ ] 运行多次测试,验证测试稳定性
+
+## 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`)
+- **集成测试位置**: `packages/goods-management-ui-mt/tests/integration/`
+- **主要集成测试文件**: `goods-management.integration.test.tsx`
+- **API客户端**: `packages/goods-management-ui-mt/src/api/goodsClient.ts`
+- **共享UI组件**: `@d8d/shared-ui-components` (shadcn/ui组件库,46+基础组件)
+
+### 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模拟,无需分别模拟客户端管理器
+- **集成测试特殊要求**: 需要为集成的UI包组件配置相应的API响应,支持多个UI包组件的API模拟配置
+
+### 集成测试特点
+- **跨组件协作**: 测试多个组件间的协作和数据流
+- **真实API交互**: 模拟真实的API交互,验证组件在真实环境下的行为
+- **多包集成**: 可能涉及多个UI包组件的集成测试
+- **复杂场景**: 测试复杂用户交互流程和状态管理
+
+### 技术约束
+- **租户隔离**: 所有查询必须包含tenantId过滤,测试模拟响应必须包含租户相关字段
+- **API兼容性**: 保持现有API行为不变,模拟响应必须与实际API响应结构一致
+- **类型安全**: 使用TypeScript确保模拟响应与API类型兼容
+- **可维护性**: 保持模拟响应与实际API响应结构一致,便于后续更新
+- **跨包兼容性**: 确保API模拟支持多个UI包组件的配置
+
+### 文件变更
+**待修改文件**:
+1. `packages/goods-management-ui-mt/tests/integration/goods-management.integration.test.tsx` - 更新API模拟规范
+
+**参考文件**:
+1. `docs/architecture/testing-strategy.md` - API模拟规范参考
+2. 其他已符合API模拟规范的测试文件(如ChildGoodsList.test.tsx) - 参考实现
+
+## Testing
+### 测试标准 [Source: architecture/testing-strategy.md]
+- **测试文件位置**: `packages/goods-management-ui-mt/tests/integration/`目录下
+- **集成测试位置**: `tests/integration/**/*.test.{ts,tsx}`
+- **测试框架**: Vitest + Testing Library + hono/testing + shared-test-util
+- **测试要求**: 所有测试必须符合API模拟规范,使用统一的`rpcClient`模拟
+- **测试模式**: 使用测试数据工厂模式,避免硬编码测试数据
+
+### 测试策略要求
+- **集成测试**: 验证组件间协作和数据流,必须模拟真实的API交互
+- **错误测试**: 必须测试各种错误场景(网络错误、验证错误、服务器错误等)
+- **覆盖率要求**: 集成测试覆盖率不应低于现有水平
+- **验证标准**: 所有测试必须通过,无flaky tests,测试执行稳定可靠
+- **跨包测试**: 支持多个UI包组件的集成测试,API模拟配置正确
+
+### 测试验证步骤
+1. **运行集成测试**: 验证修复后的集成测试通过
+2. **运行完整测试套件**: 验证所有相关组件测试通过
+3. **检查覆盖率报告**: 确保测试覆盖率保持或提高
+4. **验证跨包集成**: 确保集成测试中的API模拟正确工作
+5. **运行多次测试**: 验证测试稳定性,无随机失败
+
+## 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
+无
+
+### Completion Notes List
+*待开发代理填写*
+
+### File List
+*待开发代理填写*
+
+## QA Results
+*此部分由QA代理在审查完成后填写*