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

📝 docs(testing): 完善Taro小程序测试体系文档

- 在architecture.md中添加Taro小程序测试策略章节
- 更新testing-strategy.md,明确区分主项目和Taro小程序测试体系
- 修改005.001.story.md中的测试位置和框架说明
- 完善taro-test.md文档,添加详细的安装、配置和执行指南
- 统一Taro测试文件存放位置为mini/tests/目录
yourname 4 месяцев назад
Родитель
Сommit
1851128742
4 измененных файлов с 171 добавлено и 35 удалено
  1. 7 0
      docs/architecture.md
  2. 53 3
      docs/architecture/testing-strategy.md
  3. 7 6
      docs/stories/005.001.story.md
  4. 104 26
      docs/taro-test.md

+ 7 - 0
docs/architecture.md

@@ -912,6 +912,13 @@ NODE_ENV=development
 - **测试类型**: 单元测试、集成测试、E2E测试
 - **测试策略**: 详见 [测试策略文档](./testing-strategy.md)
 
+### Taro小程序测试策略
+- **测试框架**: 使用Jest + @tarojs/test-utils-react (独立于主项目)
+- **测试位置**: `mini/tests/` 目录
+- **测试范围**: 组件测试、页面测试、应用级测试
+- **多端测试**: 支持H5和小程序环境测试
+- **详细规范**: 参见 [Taro测试规范文档](../taro-test.md)
+
 ### 测试策略
 
 详细的测试策略、标准、执行流程和最佳实践请参考 [测试策略文档](./testing-strategy.md)。

+ 53 - 3
docs/architecture/testing-strategy.md

@@ -12,9 +12,13 @@
 
 本文档定义了出行服务项目的完整测试策略,基于现有的测试基础设施和最佳实践。测试策略遵循测试金字塔模型,确保代码质量、功能稳定性和系统可靠性。
 
+**注意**: 本测试策略主要针对主项目(后端API + React管理后台),Taro小程序项目有独立的测试体系,详见 [Taro测试规范文档](../taro-test.md)。
+
 ## 测试金字塔策略
 
-### 单元测试 (Unit Tests)
+### 主项目测试体系 (后端API + React管理后台)
+
+#### 单元测试 (Unit Tests)
 - **范围**: 单个函数、类或组件
 - **目标**: 验证独立单元的correctness
 - **位置**: `tests/unit/**/*.test.{ts,tsx}`
@@ -22,7 +26,7 @@
 - **覆盖率目标**: ≥ 80%
 - **执行频率**: 每次代码变更
 
-### 集成测试 (Integration Tests)
+#### 集成测试 (Integration Tests)
 - **范围**: 多个组件/服务协作
 - **目标**: 验证模块间集成和交互
 - **位置**: `tests/integration/**/*.test.{ts,tsx}`
@@ -30,7 +34,7 @@
 - **覆盖率目标**: ≥ 60%
 - **执行频率**: 每次API变更
 
-### E2E测试 (End-to-End Tests)
+#### E2E测试 (End-to-End Tests)
 - **范围**: 完整用户流程
 - **目标**: 验证端到端业务流程
 - **位置**: `tests/e2e/**/*.test.{ts,tsx}`
@@ -38,6 +42,32 @@
 - **覆盖率目标**: 关键用户流程100%
 - **执行频率**: 每日或每次重大变更
 
+### Taro小程序测试体系 (独立项目)
+
+#### 组件测试 (Component Tests)
+- **范围**: Taro小程序组件
+- **目标**: 验证组件渲染和交互行为
+- **位置**: `mini/tests/**/*.test.{ts,tsx}`
+- **框架**: Jest + @tarojs/test-utils-react
+- **覆盖率目标**: ≥ 70%
+- **执行频率**: 每次组件变更
+
+#### 页面测试 (Page Tests)
+- **范围**: 小程序页面级测试
+- **目标**: 验证页面生命周期和路由
+- **位置**: `mini/tests/pages/**/*.test.{ts,tsx}`
+- **框架**: Jest + @tarojs/test-utils-react
+- **覆盖率目标**: ≥ 60%
+- **执行频率**: 每次页面变更
+
+#### 多端测试 (Multi-Platform Tests)
+- **范围**: 不同小程序平台测试
+- **目标**: 验证多端兼容性
+- **位置**: `mini/tests/platforms/**/*.test.{ts,tsx}`
+- **框架**: Jest + 环境变量区分平台
+- **覆盖率目标**: 关键功能100%
+- **执行频率**: 每次平台相关变更
+
 ## 测试环境配置
 
 ### 开发环境
@@ -148,6 +178,8 @@ const inactiveUser = createTestUser({ active: false });
 ## 测试执行流程
 
 ### 本地开发测试
+
+#### 主项目测试
 ```bash
 # 运行所有测试
 npm test
@@ -165,6 +197,24 @@ npm run test:e2e:chromium
 npm run test:coverage
 ```
 
+#### Taro小程序项目测试
+```bash
+# 进入mini目录
+cd mini
+
+# 运行所有Taro测试
+npm test
+
+# 运行H5环境测试
+npm run test:h5
+
+# 运行微信小程序环境测试
+npm run test:weapp
+
+# 生成覆盖率报告
+npm run test:coverage
+```
+
 ### CI/CD流水线测试
 1. **代码推送** → 触发测试流水线
 2. **单元测试** → 快速反馈,必须通过

+ 7 - 6
docs/stories/005.001.story.md

@@ -150,10 +150,10 @@ Draft
 
 ### Testing
 **测试要求**:
-- **单元测试位置**: `tests/unit/` 目录 [Source: architecture/testing-strategy.md#单元测试]
-- **集成测试位置**: `tests/integration/` 目录 [Source: architecture/testing-strategy.md#集成测试]
-- **E2E测试位置**: `tests/e2e/` 目录 [Source: architecture/testing-strategy.md#e2e测试]
-- **测试框架**: Vitest + Testing Library + hono/testing + Playwright [Source: architecture/testing-strategy.md#测试框架]
+- **主项目测试位置**: `tests/unit/`, `tests/integration/`, `tests/e2e/` 目录 [Source: architecture/testing-strategy.md#主项目测试体系]
+- **Taro项目测试位置**: `mini/tests/` 目录 [Source: architecture/testing-strategy.md#taro小程序测试体系]
+- **主项目测试框架**: Vitest + Testing Library + hono/testing + Playwright [Source: architecture/testing-strategy.md#测试框架]
+- **Taro项目测试框架**: Jest + @tarojs/test-utils-react [Source: architecture/testing-strategy.md#taro小程序测试体系]
 - **覆盖率目标**: 核心业务逻辑 > 80% [Source: architecture/testing-strategy.md#覆盖率目标]
 
 **具体测试要求**:
@@ -167,11 +167,11 @@ Draft
   - 边界条件:无活动数据、活动状态筛选
   - 关联查询:活动关联的路线数据
   - 错误场景:无效类型参数、认证失败
-- 前端组件的单元测试 (`tests/unit/mini/`)
+- 前端组件的单元测试 (`mini/tests/components/`)
   - 组件渲染:首页、活动选择、班次列表页面
   - 用户交互:查询表单提交、筛选条件变更
   - 状态管理:查询结果展示、加载状态处理
-- 查询功能的集成测试 (`tests/integration/mini/`)
+- 查询功能的集成测试 (`mini/tests/pages/`)
   - 完整查询流程:首页查询 → 活动筛选 → 班次列表
   - 数据一致性:前端展示与后端数据一致
   - 错误处理:网络错误、API错误处理
@@ -182,6 +182,7 @@ Draft
 ## Change Log
 | Date | Version | Description | Author |
 |------|---------|-------------|--------|
+| 2025-10-15 | 1.7 | 修正Taro测试位置,统一使用mini/tests/目录 | Winston (Architect) |
 | 2025-10-15 | 1.6 | 修正前端页面路径从src/client到mini/src目录 | Bob (Scrum Master) |
 | 2025-10-15 | 1.5 | 修复测试位置与测试策略文档不一致问题,添加安全要求和数据库迁移任务 | Bob (Scrum Master) |
 | 2025-10-15 | 1.4 | 补充MVP文档中标识为暂时不要的页面元素 | Bob (Scrum Master) |

+ 104 - 26
docs/taro-test.md

@@ -1,44 +1,70 @@
+# Taro小程序测试规范
+
 版本:4.x
-概述
-对 Taro 进行组件/应用级别的单元测试
 
-该测试工具更加关注组件的用户行为和外部表现,而不是内部实现细节
+## 概述
+
+本文档定义了出行服务项目中Taro小程序的测试规范。Taro测试使用独立的测试体系,与主项目的Vitest测试框架分离。
+
+**测试框架**: Jest + @tarojs/test-utils-react
+**测试位置**: `mini/tests/` 目录
+**测试范围**: 组件测试、页面测试、应用级测试、多端测试
+
+## 安装
 
-Github 地址:传送门
+在Taro项目根目录(mini/)下安装测试依赖:
 
-安装
-在 Taro 项目根目录下安装
+```bash
+# 进入mini目录
+cd mini
 
 # React:
 npm i @tarojs/test-utils-react --save
-# Vue3:
-npm i @tarojs/test-utils-vue3 --save
-# Vue2:
-npm i @tarojs/test-utils-vue --save
+# 安装Jest
+npm i jest --save
+```
 
-注意
-@tarojs/plugin-platform-h5为前置 peerDependencies,请勿删除该依赖申明
+**注意**: @tarojs/plugin-platform-h5为前置 peerDependencies,请勿删除该依赖申明
 
-使用
-安装 Jest
-npm i jest --save
+## 配置
 
-配置 Jest
-在 Taro 项目根目录添加文件jest.config.js。配置文件如下
+### Jest配置
+在Taro项目根目录(mini/)添加文件 `jest.config.js`
 
-// react
+```javascript
+// mini/jest.config.js
 const defineJestConfig = require('@tarojs/test-utils-react/dist/jest.js').default
-// vue3
-// const defineJestConfig = require("@tarojs/test-utils-vue3/dist/jest.js").default;
-// vue2
-// const defineJestConfig = require("@tarojs/test-utils-vue/dist/jest.js").default;
 
 module.exports = defineJestConfig({
-  // testEnvironment: 'jsdom',  // 测试使用的环境
-  // testMatch: ['<rootDir>/__test__/**/*.test.{js,ts}'],  // 测试文件匹配
+  testEnvironment: 'jsdom',
+  testMatch: ['<rootDir>/tests/**/*.test.{js,ts,tsx}'],
+  collectCoverageFrom: [
+    'src/**/*.{ts,tsx}',
+    '!src/**/*.d.ts',
+    '!src/app.tsx',
+    '!src/app.config.ts'
+  ],
+  coverageDirectory: 'coverage',
+  coverageReporters: ['text', 'lcov', 'html'],
+  setupFilesAfterEnv: ['<rootDir>/tests/setup.ts']
 })
+```
+
+### package.json脚本配置
+在 `mini/package.json` 中添加测试脚本:
+
+```json
+{
+  "scripts": {
+    "test": "jest",
+    "test:h5": "export TARO_ENV_JEST=h5 && jest",
+    "test:weapp": "export TARO_ENV_JEST=weapp && jest",
+    "test:coverage": "jest --coverage"
+  }
+}
+```
 
-defineJestConfig 已内置了部分初始化配置,需要修改可自行配置覆盖 配置文件参考 Jest 官网:Configuring Jest
+`defineJestConfig` 已内置了部分初始化配置,需要修改可自行配置覆盖。配置文件参考 [Jest官网](https://jestjs.io/docs/configuration)。
 
 编写测试用例
 组件级别
@@ -133,4 +159,56 @@ if (process.env.TARO_ENV === 'weapp') {
 因为这是一个在线运行的测试工具,主要目的也是对用户行为和外部表现进行测试断言,在测试环境使用的还是以 h5 的形式来模拟整个程序的运行,对于其他小程序特有的生命周期和 API,我们推荐以下做法:
 
 生命周期: 使用PageLifecycle的triggerXxxxx进行生命周期的触发
-API: 使用jest提供的mock方法来模拟@tarojs/taro的 api,模拟小程序的返回值
+API: 使用jest提供的mock方法来模拟@tarojs/taro的 api,模拟小程序的返回值
+
+## 项目特定测试指导
+
+### 测试目录结构
+```
+mini/
+├── tests/
+│   ├── setup.ts                    # 测试设置文件
+│   ├── components/                 # 组件测试
+│   │   ├── ui/                    # UI组件测试
+│   │   │   ├── button.test.tsx
+│   │   │   ├── form.test.tsx
+│   │   │   └── tab-bar.test.tsx
+│   ├── pages/                      # 页面测试
+│   │   ├── index.test.tsx         # 首页测试
+│   │   ├── login.test.tsx         # 登录页测试
+│   │   ├── profile.test.tsx       # 个人中心测试
+│   │   └── explore.test.tsx       # 探索页测试
+│   └── utils/                      # 工具函数测试
+│       ├── auth.test.ts
+│       └── minio.test.ts
+```
+
+### 测试覆盖率目标
+- **组件测试**: ≥ 70%
+- **页面测试**: ≥ 60%
+- **工具函数**: ≥ 80%
+- **关键业务逻辑**: 100%
+
+### 测试执行
+```bash
+# 在mini目录下执行
+cd mini
+
+# 运行所有测试
+npm test
+
+# 运行H5环境测试
+npm run test:h5
+
+# 运行微信小程序环境测试
+npm run test:weapp
+
+# 生成覆盖率报告
+npm run test:coverage
+```
+
+### 与主项目的关系
+- Taro测试体系完全独立于主项目的Vitest测试
+- 两者使用不同的测试框架和配置
+- 测试执行需要分别进入对应目录
+- CI/CD流水线需要分别配置两个项目的测试任务