006.020.goods-management-integration-test-api-mock-normalization.story.md 8.7 KB

Story 006.020: 商品管理集成测试API模拟规范化

Status

Ready for Review

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

  • [x] 分析当前集成测试API模拟实现 (AC: 1, 4, 5, 6)

    • 分析goods-management.integration.test.tsx当前的API模拟实现
    • 识别不符合API模拟规范的代码(直接模拟goodsClientManager等)
    • 分析跨包集成测试的API响应配置需求
  • [x] 按照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模拟配置
  • [x] 配置跨包集成测试API响应 (AC: 2, 3, 4)

    • 配置商品管理UI包组件的API响应
    • 配置其他相关UI包组件的API响应(如需要)
    • 确保集成测试中的API模拟正确工作
  • [x] 验证集成测试功能 (AC: 2, 3, 5)

    • 运行goods-management.integration.test.tsx所有集成测试
    • 验证测试通过,API模拟正确工作
    • 验证跨包集成测试中的API响应配置正确
  • [x] 运行完整测试验证 (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对象,包含statusokjson()等方法,确保与实际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)
2025-12-15 1.1 实施故事,更新API模拟规范,修复直接使用goodsClient的问题,验证所有集成测试通过 James (Developer)

Dev Agent Record

此部分由开发代理在实现过程中填写

Agent Model Used

Claude Sonnet

Debug Log References

Completion Notes List

  1. 分析完成:当前集成测试已使用统一的rpcClient模拟,符合API模拟规范。识别出两处直接使用goodsClient的问题。
  2. 重构完成:修复直接使用goodsClient的问题,统一使用goodsClientManager.get()。测试文件已符合API模拟规范所有要求。
  3. API响应配置完成:商品管理UI包组件的API响应已正确配置,其他UI包组件已通过组件模拟处理。
  4. 验证完成:运行所有集成测试通过(14/14),API模拟工作正常。
  5. 测试稳定性:集成测试运行稳定,无flaky tests。
  6. 已修复:组件未显示"父商品: 父商品1"文本的问题已修复,修复测试数据结构,添加parent对象,恢复UI检查。
  7. 完整性验证:运行完整测试套件验证,14个集成测试全部通过,API模拟规范符合要求,父子商品显示功能正常。

File List

  1. packages/goods-management-ui-mt/tests/integration/goods-management.integration.test.tsx - 更新API模拟规范:
    • 修复直接使用goodsClient的问题,改为使用goodsClientManager.get()保持一致性
    • 修复测试数据结构不匹配问题,为子商品添加parent对象,恢复被注释的UI检查
    • 确保统一的rpcClient模拟正常工作,所有集成测试通过

QA Results

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