Просмотр исходного кода

docs(story): 更新史诗014范围并创建故事014.003

- 史诗014: 故事014-03范围缩减为创建共享测试工具包
- 故事014.003: 创建Draft状态的故事,聚焦mini-testing-utils包
- 故事011.004: 更新任务完成状态,完善企业专用API规范
- 故事011.001: 添加API客户端架构变更说明

🤖 Generated with [Claude Code](https://claude.com/claude-code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
yourname 4 недель назад
Родитель
Сommit
3289477164

+ 6 - 24
docs/prd/epic-014-mini-ui-component-modularization.md

@@ -156,7 +156,7 @@
 - [ ] 包体积和构建时间得到优化
 
 ### 故事014-03:建立页面包集成测试和内勤检查框架
-**背景:** 页面拆分为独立包后,需要建立相应的集成测试框架,确保页面包在mini项目中集成正常。同时需要建立内勤检查(代码质量、安全、性能等)自动化流程,提高代码质量
+**背景:** 页面拆分为独立包后,需要创建共享的测试工具包,以便所有页面包可以统一使用测试工具,提高测试一致性和开发效率
 
 **任务列表:**
 1. 创建mini专用的共享测试工具包:
@@ -166,31 +166,13 @@
    - 配置正确的构建和导出设置,确保可以被各个页面包正确引用
    - 提供使用示例和文档
    - 更新现有页面包使用新的测试工具包
-2. 建立集成测试框架:
-   - 创建端到端测试配置
-   - 编写页面包在mini环境中的集成测试
-   - 测试页面路由、数据加载、用户交互等关键场景
-3. 创建内勤检查自动化:
-   - 代码质量检查(ESLint, Stylelint)
-   - 类型安全检查(TypeScript严格模式)
-   - 性能检查(包体积分析,构建时间监控)
-   - 安全扫描(依赖漏洞检查)
-4. 配置CI/CD流水线:
-   - 为每个页面包配置独立的测试任务
-   - 集成内勤检查到PR流程
-   - 设置自动化报告和告警
-5. 创建监控和告警:
-   - 测试覆盖率监控
-   - 构建性能监控
-   - 代码质量趋势分析
 
 **验收标准:**
-- [ ] mini专用的共享测试工具包创建完成,可以被所有页面包正确引用
-- [ ] 集成测试框架建立,覆盖主要业务场景
-- [ ] 内勤检查自动化流程配置完成
-- [ ] CI/CD流水线可以并行测试各个页面包
-- [ ] 测试覆盖率报告和代码质量报告可查看
-- [ ] 发现问题可以及时告警和跟踪
+- [ ] `mini-testing-utils` 包创建完成,包含所有必需的测试工具函数(setupTestEnv、renderTaroComponent、Taro组件mock等)
+- [ ] 包解决模块导出兼容性问题(TypeScript源文件 vs JavaScript运行时)
+- [ ] 包配置正确的构建和导出设置,可以被所有页面包正确引用
+- [ ] 包包含使用示例和文档,便于其他页面包集成
+- [ ] 现有页面包更新成功,能够使用新的测试工具包
 
 ## 兼容性要求
 

+ 1 - 0
docs/stories/011.001.story.md

@@ -265,6 +265,7 @@
 - 业务UI组件(YongrenTabBarLayout)现在位于 `@d8d/yongren-shared-ui` 包
 - 企业认证框架现在位于 `@d8d/mini-enterprise-auth-ui` 包
 - 页面组件现在位于对应的UI包中,mini项目中保留桥接文件
+- **API客户端架构变更**:按照史诗011的mini-ui-packages架构,**API客户端现在在各自的UI包内注册**,而非统一在`mini/src/api.ts`中注册。每个UI包使用`@d8d/mini-shared-ui-components/utils/rpc/rpc-client`工具创建自己的API客户端,实现模块化集成。`mini/src/api.ts`中的客户端为通用版本,企业用户应使用UI包内创建的企业专用API客户端。
 
 **验收标准完成情况:**
 - [x] AC1:allin系统模块及史诗012补充API的RPC客户端成功集成到 `mini/src/api.ts`

+ 207 - 22
docs/stories/011.004.story.md

@@ -19,14 +19,14 @@ Ready for Review
 ## 任务 / 子任务
 
 - [x] 任务1:实现订单列表页(AC:1)
-  - [ ] 创建订单管理页面组件,使用基础布局组件
+  - [x] 创建订单管理页面组件,使用基础布局组件
   - [ ] 集成订单管理API(order模块)
   - [ ] 实现订单表格展示(订单号、人才姓名、岗位、状态、创建时间等)
   - [ ] 实现订单搜索功能(按订单号、人才姓名搜索)
   - [ ] 实现状态筛选(进行中、已完成、已取消等)
   - [ ] 添加分页和排序功能
 - [x] 任务2:实现订单状态管理(AC:2)
-  - [ ] 创建订单详情模态框或页面
+  - [x] 创建订单详情模态框或页面
   - [ ] 展示订单完整信息(基础信息、关联人才、岗位详情等)
   - [ ] 实现订单状态变更功能(需权限验证)
   - [ ] 添加订单备注和操作日志
@@ -49,20 +49,20 @@ Ready for Review
   - [ ] 添加数据刷新和实时更新
   - [ ] 优化移动端表格交互
 - [x] 任务6:集成Navbar导航栏组件(页面层级结构规范)
-  - [ ] 订单列表页:集成Navbar组件,标题"订单列表",隐藏左侧返回按钮(主页面配置)
+  - [x] 订单列表页:集成Navbar组件,标题"订单列表",隐藏左侧返回按钮(主页面配置)
     - 导入Navbar组件:`import { Navbar } from '@d8d/mini-shared-ui-components/components/navbar'`
     - 配置navbar:`title="订单列表"`,`leftIcon=""`,`leftText=""`
     - 保持YongrenTabBarLayout包裹,`activeTab="order"`
     - 调整ScrollView布局:`px-4 pb-4 pt-0`(移除顶部内边距适配navbar占位)
-  - [ ] 订单详情页:集成Navbar组件,标题"订单详情",带左侧返回按钮(二级页面配置)
+  - [x] 订单详情页:集成Navbar组件,标题"订单详情",带左侧返回按钮(二级页面配置)
     - 导入Navbar组件,配置:`title="订单详情"`,`leftIcon="i-heroicons-chevron-left-20-solid"`,`leftText="返回"`
     - 移除YongrenTabBarLayout包裹(二级页不需要底部导航)
     - 调整ScrollView布局:`h-screen overflow-y-auto px-4 pb-4 pt-0`
-  - [ ] 统一页面层级结构:主页面使用YongrenTabBarLayout+Navbar(无返回),二级页使用Navbar(带返回)
-  - [ ] 验证类型检查:确保所有页面类型检查通过
+  - [x] 统一页面层级结构:主页面使用YongrenTabBarLayout+Navbar(无返回),二级页使用Navbar(带返回)
+  - [x] 验证类型检查:确保所有页面类型检查通过
 - [x] 任务7:编写集成测试
-  - [ ] 编写订单列表功能测试
-  - [ ] 编写订单状态管理测试
+  - [x] 编写订单列表功能测试
+  - [x] 编写订单状态管理测试
   - [ ] 测试打卡数据统计功能
   - [ ] 测试视频管理功能
 
@@ -75,25 +75,113 @@ Ready for Review
 - 011.003(人才管理):订单与人才关联,可能需要人才选择功能,页面层级结构规范
 
 ### API规范
-**订单管理API**(order模块):
-- 订单列表查询接口(支持搜索、筛选、分页)
-- 订单详情查询接口
-- 订单状态更新接口
-- 订单创建/编辑接口(如有权限)
+**订单管理API**(order模块)- **通用版本**:
+- **警告**:此API为通用版本,返回所有订单数据,未按企业过滤。**企业用户必须使用下面的"企业专用订单API"**,确保数据安全隔离。
+- **架构说明**:此客户端在`mini/src/api.ts`中统一注册,为通用版本。按照史诗011的mini-ui-packages架构,**企业用户应使用UI包内创建的企业专用订单API客户端**,而非此通用版本。
+- **客户端**:`orderClient`(在`mini/src/api.ts`中可用,由故事011.001集成的通用版本)
+- **路径前缀**:`/api/v1/order`
+- **主要接口**:
+  - `GET /` - 订单列表查询接口(支持搜索、筛选、分页)
+    - 查询参数:`search?`(订单号、订单名称)、`status?`(订单状态)、`page?`、`limit?`
+  - `GET /{id}` - 订单详情查询接口
+  - `PUT /{id}` - 订单状态更新接口
+  - `POST /` - 订单创建接口(如有权限)
+  - `PUT /{id}` - 订单编辑接口(如有权限)
+- **使用示例**(仅用于参考,企业用户不应使用):
+  ```typescript
+  import { orderClient } from '@/api'
+
+  // 获取订单列表(带搜索和筛选)
+  const orderList = await orderClient.get({
+    query: {
+      search: '阿里巴巴',
+      status: 'in_progress',
+      page: 1,
+      limit: 20
+    }
+  })
+
+  // 获取订单详情
+  const orderDetail = await orderClient[':id'].get({
+    param: { id: '123' }
+  })
+  ```
+
+**企业专用订单API**(order模块扩展):
+- **背景**:通用订单API(`/api/v1/order`)返回所有订单数据,未按企业过滤。企业专用订单API(`/api/v1/yongren/order`)只返回当前企业用户关联的订单数据,确保数据安全隔离。
+- **架构模式**:按照史诗011的mini-ui-packages架构,API客户端在各自的UI包内注册,而非统一在`mini/src/api.ts`中注册。
+- **客户端创建**:在`@d8d/yongren-order-management-ui`包内创建企业专用订单API客户端,参考`@d8d/mini-enterprise-auth-ui`包的模式:
+  ```typescript
+  // 文件:mini-ui-packages/yongren-order-management-ui/src/api/enterpriseOrderClient.ts
+  import type { enterpriseOrderRoutes } from '@d8d/order-module';
+  import { rpcClient } from '@d8d/mini-shared-ui-components/utils/rpc/rpc-client';
+
+  export const enterpriseOrderClient = rpcClient<typeof enterpriseOrderRoutes>('/api/v1/yongren/order');
+  ```
+- **路径前缀**:`/api/v1/yongren/order`
+- **主要接口**:
+  - `GET /` - 企业专用订单列表查询接口(支持搜索、筛选、分页,仅返回当前企业关联订单)
+    - 查询参数:`keyword?`(搜索关键词,支持订单号、订单名称)、`order_status?`(订单状态)、`page?`、`limit?`
+  - `GET /{id}` - 企业专用订单详情查询接口(验证订单是否属于当前企业)
+  - `PUT /{id}` - 企业专用订单状态更新接口(验证订单权限)
+  - `POST /` - 企业专用订单创建接口(如有权限)
+  - `PUT /{id}` - 企业专用订单编辑接口(验证订单权限)
+  - `GET /{id}/checkin-statistics` - 订单打卡数据统计接口(已通过史诗012实现)
+  - `GET /{id}/video-statistics` - 订单视频统计接口(已通过史诗012实现)
+- **使用示例**:
+  ```typescript
+  // 在订单管理UI包内使用
+  import { enterpriseOrderClient } from '../api/enterpriseOrderClient'
+
+  // 获取企业专用订单列表(带搜索和筛选)
+  const orderList = await enterpriseOrderClient.$get({
+    query: {
+      keyword: '阿里巴巴',
+      order_status: 'in_progress',
+      page: 1,
+      limit: 20
+    }
+  })
+
+  // 获取企业专用订单详情
+  const orderDetail = await enterpriseOrderClient[':id'].$get({
+    param: { id: '123' }
+  })
+
+  // 获取订单打卡数据统计
+  const checkinStats = await enterpriseOrderClient[':id']['checkin-statistics'].$get({
+    param: { id: '123' }
+  })
+
+  // 获取订单视频统计
+  const videoStats = await enterpriseOrderClient[':id']['video-statistics'].$get({
+    param: { id: '123' }
+  })
+  ```
 
 **订单统计API**(史诗012提供):
-- 打卡数据统计接口
-- 考勤分析接口
-- 订单完成率统计
+- **企业专用版本**:通过企业专用订单API的`checkin-statistics`和`video-statistics`子路由访问
+  - 路径:`/api/v1/yongren/order/{id}/checkin-statistics` - 打卡数据统计接口
+  - 路径:`/api/v1/yongren/order/{id}/video-statistics` - 视频统计接口
+- **主要功能**:
+  - 打卡数据统计:出勤率、迟到早退统计、考勤分析
+  - 订单完成率统计:订单进度、完成情况分析
+  - 视频统计:视频数量、类型分布、上传时间分析
 
 **视频管理API**(史诗012提供):
-- 视频列表查询接口(按订单筛选)
-- 视频播放/下载接口
-- 视频统计接口
+- **企业专用版本**:通过企业专用订单API的`video-statistics`子路由访问,或通过文件管理API按关联类型筛选
+- **主要接口**:
+  - 视频列表查询接口(按订单筛选,自动验证企业权限)
+  - 视频播放/下载接口(验证文件权限)
+  - 视频统计接口(分类统计、类型分布)
 
 **技术集成**:
-- 使用故事011.001集成的RPC客户端
-- API路径前缀:`api/v1/yongren`
+- **RPC客户端工具**:使用`@d8d/mini-shared-ui-components/utils/rpc/rpc-client`提供的RPC客户端工具,在UI包内创建企业专用API客户端
+- **企业专用API路径前缀**:`api/v1/yongren`
+- **架构模式**:按照史诗011的mini-ui-packages架构,每个UI包负责创建和管理自己的API客户端,实现模块化集成
+- **类型安全**:从相应的业务模块包(如`@d8d/order-module`)导入路由类型定义,确保类型安全
+- **数据安全**:所有企业专用API自动验证企业用户权限,仅返回当前企业关联数据
+- **认证集成**:所有API调用自动携带企业用户token(通过企业认证框架管理)
 
 ### 组件规范
 **订单管理页设计规范**:
@@ -261,7 +349,104 @@ Ready for Review
 | 2025-12-20 | 1.2 | 实施订单管理功能:订单列表页、订单详情页、打卡统计、视频统计、集成测试 | James (Developer) |
 
 ## 开发代理记录
-*此部分由开发代理在实施过程中填充*
+
+### 使用的代理模型
+claude-sonnet
+
+### 调试日志引用
+- 类型检查发现订单管理UI包中API客户端为模拟实现,需要集成真实RPC客户端
+- 订单列表和详情组件使用模拟数据,需要连接后端API
+
+### 完成笔记列表
+- ✅ 检查故事011.004代码实现完成情况:
+  - 订单列表页已创建:`mini-ui-packages/yongren-order-management-ui/src/pages/OrderList/OrderList.tsx`
+  - 订单详情页已创建:`mini-ui-packages/yongren-order-management-ui/src/pages/OrderDetail/OrderDetail.tsx`
+  - API客户端占位符已创建:`mini-ui-packages/yongren-order-management-ui/src/api/orderClient.ts`
+  - 测试文件已创建:`OrderList.test.tsx`和`OrderDetail.test.tsx`
+  - 构建配置完整:TypeScript配置、Jest配置、包配置
+  - 桥接文件已设置:`mini/src/pages/yongren/order/list/index.tsx`和`mini/src/pages/yongren/order/detail/index.tsx`
+- ✅ 实现订单列表页基础功能:
+  - 创建订单列表页面组件,使用`YongrenTabBarLayout`基础布局组件
+  - 实现订单表格卡片展示(订单号、人才姓名、岗位、状态、创建时间等)
+  - 实现订单搜索功能UI(按订单号、人才姓名搜索)
+  - 实现状态筛选UI(进行中、已完成、已取消等)
+  - 集成`Navbar`导航栏组件,标题"订单列表",隐藏左侧返回按钮(主页面配置)
+  - 调整ScrollView布局:`px-4 pb-4 pt-0`适配navbar占位
+  - 使用模拟数据展示订单列表
+- ✅ 实现订单详情页基础功能:
+  - 创建订单详情页面组件
+  - 展示订单完整信息(基础信息、关联人才、岗位详情等)
+  - 实现订单状态变更UI(需权限验证)
+  - 添加订单备注和操作日志UI
+  - 集成`Navbar`导航栏组件,标题"订单详情",带左侧返回按钮(二级页面配置)
+  - 移除`YongrenTabBarLayout`包裹(二级页不需要底部导航)
+  - 调整ScrollView布局:`h-screen overflow-y-auto px-4 pb-4 pt-0`
+  - 使用模拟数据展示订单详情
+- ✅ 实现打卡数据统计UI:
+  - 创建打卡数据统计卡片UI(出勤率、迟到早退统计等)
+  - 实现打卡日历或时间线视图UI
+  - 支持按时间范围筛选打卡数据UI
+  - 使用模拟数据展示统计信息
+- ✅ 实现视频统计功能UI:
+  - 创建视频统计卡片UI(视频数量、类型分布)
+  - 展示订单关联视频列表UI
+  - 支持视频播放、下载、分享UI
+  - 添加批量视频下载功能UI
+  - 使用模拟数据展示视频统计
+- ✅ 集成Navbar导航栏组件(页面层级结构规范):
+  - 订单列表页:集成Navbar组件,标题"订单列表",隐藏左侧返回按钮(主页面配置)
+    - 导入Navbar组件:`import { Navbar } from '@d8d/mini-shared-ui-components/components/navbar'`
+    - 配置navbar:`title="订单列表"`,`leftIcon=""`,`leftText=""`
+    - 保持YongrenTabBarLayout包裹,`activeTab="order"`
+    - 调整ScrollView布局:`px-4 pb-4 pt-0`(移除顶部内边距适配navbar占位)
+  - 订单详情页:集成Navbar组件,标题"订单详情",带左侧返回按钮(二级页面配置)
+    - 导入Navbar组件,配置:`title="订单详情"`,`leftIcon="i-heroicons-chevron-left-20-solid"`,`leftText="返回"`
+    - 移除YongrenTabBarLayout包裹(二级页不需要底部导航)
+    - 调整ScrollView布局:`h-screen overflow-y-auto px-4 pb-4 pt-0`
+  - 统一页面层级结构:主页面使用YongrenTabBarLayout+Navbar(无返回),二级页使用Navbar(带返回)
+- ✅ 编写基础测试:
+  - 创建订单列表组件测试:`OrderList.test.tsx`
+  - 创建订单详情组件测试:`OrderDetail.test.tsx`
+  - 测试组件渲染和基本交互
+
+### 发现的问题
+1. **API集成缺失**:订单管理UI包中的API客户端为模拟实现(`orderClient.ts`),需要集成真实的企业专用订单API
+2. **数据模拟状态**:订单列表和详情组件使用硬编码的模拟数据,未连接后端API
+3. **原型对照检查**:需要对照原型文件 `docs/小程序原型/yongren.html` 第1114-1301行进行详细UI验证
+4. **企业专用API使用**:需要确认使用企业专用订单API(`/api/v1/yongren/order`)而非通用订单API,确保数据安全隔离
+5. **Taro小程序Text组件垂直排列**:可能需要为包含多个Text组件的View容器添加`flex flex-col`类,确保垂直排列符合原型设计
+
+### 建议
+1. **集成真实的企业专用订单API客户端**:
+   - 在`mini-ui-packages/yongren-order-management-ui/src/api/`目录创建`enterpriseOrderClient.ts`文件
+   - 参考`@d8d/mini-enterprise-auth-ui`包的模式创建客户端:
+     ```typescript
+     import type { enterpriseOrderRoutes } from '@d8d/order-module';
+     import { rpcClient } from '@d8d/mini-shared-ui-components/utils/rpc/rpc-client';
+
+     export const enterpriseOrderClient = rpcClient<typeof enterpriseOrderRoutes>('/api/v1/yongren/order');
+     ```
+   - **注意**:如果`enterpriseOrderRoutes`类型不可用,可能需要使用`orderRoutes`类型或确认企业专用订单API在史诗012中的实现位置
+   - 更新`src/api/index.ts`导出新的客户端
+2. **更新订单列表和详情组件**:
+   - 在`OrderList.tsx`和`OrderDetail.tsx`中导入并使用`enterpriseOrderClient`
+   - 替换硬编码的模拟数据,连接后端API获取真实数据
+   - 添加加载状态、错误处理和空状态显示
+3. **对照原型文件进行详细UI验证**:
+   - 严格对照`docs/小程序原型/yongren.html`第1114-1301行的订单管理页面设计
+   - 验证所有卡片布局、字段显示、操作按钮位置和样式
+   - 确保移动端响应式设计和交互友好性
+4. **验证企业专用API路径和权限控制**:
+   - 确认企业专用订单API路径:`/api/v1/yongren/order`
+   - 验证API自动进行企业用户权限验证,仅返回当前企业关联数据
+   - 确保数据安全隔离,防止跨企业数据访问
+5. **解决Taro小程序Text组件垂直排列问题**:
+   - 为所有包含多个Text组件的View容器添加`flex flex-col`类
+   - 验证人才详情页、订单卡片等区域的文本垂直排列符合原型设计
+6. **完善类型检查和测试**:
+   - 运行`pnpm typecheck`确保无TypeScript错误
+   - 更新`OrderList.test.tsx`和`OrderDetail.test.tsx`测试真实API集成
+   - 添加订单搜索、筛选、状态变更等功能的集成测试
 
 **文档更新记录 (2025-12-20)**:
 - 根据史诗011最新实现,更新Navbar组件集成规范

+ 131 - 0
docs/stories/014.003.story.md

@@ -0,0 +1,131 @@
+# Story 014.003: 建立页面包集成测试和内勤检查框架
+
+## Status
+Draft
+
+## Story
+**作为** mini小程序开发者,
+**我希望** 创建一个共享的测试工具包,
+**以便** 所有页面包可以统一使用测试工具,提高测试一致性和开发效率。
+
+## Acceptance Criteria
+1. `mini-testing-utils` 包创建完成,包含所有必需的测试工具函数(setupTestEnv、renderTaroComponent、Taro组件mock等)
+2. 包解决模块导出兼容性问题(TypeScript源文件 vs JavaScript运行时)
+3. 包配置正确的构建和导出设置,可以被所有页面包正确引用
+4. 包包含使用示例和文档,便于其他页面包集成
+5. 现有页面包更新成功,能够使用新的测试工具包
+
+## Tasks / Subtasks
+- [ ] 任务1:创建mini专用的共享测试工具包 (验收标准: 1-5)
+  - [ ] 创建独立的测试工具包 `mini-ui-packages/mini-testing-utils`
+  - [ ] 解决模块导出兼容性问题(TypeScript源文件 vs JavaScript运行时)
+  - [ ] 提供常用的测试工具函数:`setupTestEnv`、`renderTaroComponent`、Taro组件mock等
+  - [ ] 配置正确的构建和导出设置,确保可以被各个页面包正确引用
+  - [ ] 提供使用示例和文档
+  - [ ] 更新现有页面包使用新的测试工具包
+
+## Dev Notes
+
+### 先前故事见解
+- **故事014.001**:创建了`mini-shared-ui-components`包,并建立了可复用的测试基础设施,包括`tests/__helpers__/`目录和标准化的Taro组件mock配置 [Source: docs/stories/014.001.mini-shared-ui-components.md#L47-L50]
+- **故事014.002**:创建了多个页面包:`yongren-dashboard-ui`、`yongren-order-management-ui`、`yongren-talent-management-ui`、`yongren-settings-ui`、`yongren-statistics-ui`、`mini-enterprise-auth-ui`、`yongren-shared-ui` [Source: docs/stories/014.002.story.md#L25-L31]
+- **页面包状态**:页面包已创建但集成测试框架尚未建立,需要统一的测试工具包支持 [Source: docs/stories/014.002.story.md#L44-L48]
+
+### 技术栈要求
+- **前端框架**:Taro 4.1.4 + React 18 [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L17-L18]
+- **样式方案**:Tailwind CSS + weapp-tailwindcss适配 [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L18]
+- **状态管理**:React Query [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L19]
+- **API通信**:Hono RPC客户端 [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L20]
+- **测试框架**:Jest(mini项目)[Source: docs/prd/epic-014-mini-ui-component-modularization.md#L21]
+- **包管理**:pnpm workspace [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L22]
+
+### 测试策略要求
+- **测试金字塔策略**:单元测试、集成测试、E2E测试 [Source: docs/architecture/testing-strategy.md#L35-L66]
+- **测试框架**:Vitest + Testing Library + hono/testing + shared-test-util [Source: docs/architecture/testing-strategy.md#L56]
+- **覆盖率目标**:核心业务逻辑 > 80% [Source: docs/architecture/coding-standards.md#L18]
+- **测试位置**:`tests/` 文件夹与源码并列 [Source: docs/architecture/coding-standards.md#L17]
+- **UI包测试规范**:必须遵循[UI包开发规范](./ui-package-standards.md) [Source: docs/architecture/coding-standards.md#L30]
+
+### UI包开发规范
+- **包结构规范**:标准目录结构包括`src/components/`、`src/api/`、`src/hooks/`、`src/types/`、`src/utils/` [Source: docs/architecture/ui-package-standards.md#L15-L41]
+- **package.json配置**:正确的exports映射,type: "module",main和types指向src/index.ts [Source: docs/architecture/ui-package-standards.md#L43-L85]
+- **依赖管理**:必须包含共享包依赖(@d8d/shared-types, @d8d/shared-ui-components等)[Source: docs/architecture/ui-package-standards.md#L86-L100]
+- **测试脚本**:包含test、test:watch、test:coverage等脚本 [Source: docs/architecture/ui-package-standards.md#L77-L84]
+
+### 项目结构指南
+- **mini项目位置**:`mini/` 目录包含小程序项目 [Source: docs/architecture/source-tree.md#L12-L54]
+- **UI包组织**:mini相关UI包应统一组织在`mini-ui-packages/`目录下 [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L27]
+- **现有页面包**:已在`mini-ui-packages/`目录下创建多个页面包 [Source: docs/stories/014.002.story.md#L25-L31]
+- **共享测试工具包位置**:应创建在`mini-ui-packages/mini-testing-utils` [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L163]
+
+### 测试要求
+- **测试环境配置**:需要针对Taro环境的特殊配置,支持weapp-tailwindcss [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L46]
+- **组件mock**:需要mock Taro特定的组件(Button, View, Text等)[Source: docs/stories/014.001.mini-shared-ui-components.md#L38]
+- **样式兼容性**:确保测试环境中的样式适配正常 [Source: docs/stories/014.001.mini-shared-ui-components.md#L40]
+- **RPC客户端测试**:需要mock Hono RPC客户端调用 [Source: docs/architecture/ui-package-standards.md#L28-L29]
+
+### 技术约束
+- **模块导出兼容性**:需要解决TypeScript源文件与JavaScript运行时的导出兼容性问题 [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L164]
+- **构建系统集成**:测试工具包需要与mini项目的构建系统集成 [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L25]
+- **Taro框架兼容性**:所有测试工具必须与Taro框架的组件系统兼容 [Source: docs/prd/epic-014-mini-ui-component-modularization.md#L26]
+
+### 现有测试基础设施
+**mini项目现有的测试文件可以直接复制和复用:**
+- **`mini/tests/setup.ts`**:包含完整的Taro组件mock配置和环境设置
+  - 定义了`defineAppConfig`全局函数用于测试Taro配置文件
+  - 包含完整的Taro组件mock:View, ScrollView, Text, Button, Input, Textarea, Image等
+  - 设置Taro环境变量(TARO_ENV, TARO_PLATFORM等)
+- **`mini/tests/__mocks__/taroMock.ts`**:Taro API mock文件
+  - 包含showToast、showLoading、hideLoading、navigateTo等Taro API的jest.fn() mock
+  - 提供ENV_TYPE常量和其他Taro API模拟
+- **`mini/tests/__mocks__/`目录**:其他mock文件
+  - `fileMock.js`:文件mock
+  - `styleMock.js`:样式mock
+- **现有测试示例**:`mini/tests/`目录下已有多个测试文件可作为参考模板
+  - `yongren-api.test.ts`:API测试示例
+  - `yongren-components.test.tsx`:组件测试示例
+  - `yongren-routes.test.ts`:路由测试示例
+
+**实施建议**:在创建`mini-testing-utils`包时,可以直接从`mini/tests/`目录复制和适配这些现有的测试基础设施,确保与现有mini项目测试配置保持一致。
+
+### 文件位置
+- **测试工具包**:`mini-ui-packages/mini-testing-utils/`
+- **现有页面包**:`mini-ui-packages/yongren-*-ui/`(多个包)
+- **共享UI组件包**:`mini-ui-packages/mini-shared-ui-components/`
+- **测试配置文件**:各包内的`vitest.config.ts`或`jest.config.js`
+- **CI/CD配置**:项目根目录的`.github/workflows/`或类似位置
+
+### 测试标准
+- **测试文件命名**:`.test.ts`或`.test.tsx`后缀 [Source: docs/architecture/testing-strategy.md#L41-L44]
+- **测试组织**:单元测试在`tests/unit/`,集成测试在`tests/integration/` [Source: docs/architecture/testing-strategy.md#L41-L55]
+- **测试选择器**:必须为关键交互元素添加`data-testid`属性 [Source: docs/architecture/coding-standards.md#L35]
+- **测试覆盖率报告**:使用Vitest的`--coverage`选项生成 [Source: docs/architecture/ui-package-standards.md#L82]
+
+## 项目结构注意事项
+- **目录结构一致性**:所有mini UI包应遵循相同的目录结构规范,便于统一管理
+- **测试工具包导出**:`mini-testing-utils`包需要正确配置exports映射,确保可以被其他页面包引用
+- **现有包更新**:需要更新014.002中创建的页面包,使其使用新的共享测试工具包
+- **构建配置统一**:各包的构建配置(vite.config.ts, tsconfig.json)应保持一致性
+
+## Change Log
+| Date | Version | Description | Author |
+|------|---------|-------------|--------|
+| 2025-12-21 | 1.0 | 初始故事创建 | Scrum Master |
+
+## Dev Agent Record
+*此部分由开发代理在实施过程中填写*
+
+### Agent Model Used
+*待填写*
+
+### Debug Log References
+*待填写*
+
+### Completion Notes List
+*待填写*
+
+### File List
+*待填写*
+
+## QA Results
+*此部分由QA代理在审查完成后填写*