ソースを参照

📝 docs(architecture): 更新测试策略文档

- 添加测试策略文档版本历史记录
- 将Supertest替换为hono/testing作为API测试工具
- 完善测试框架配置信息,增加测试策略文档引用
- 创建全新的测试策略文档,包含完整测试金字塔结构
- 定义各层级测试的范围、目标、框架和覆盖率要求
- 增加测试环境配置、执行流程和质量门禁标准
yourname 2 ヶ月 前
コミット
acb9e88b4c

+ 10 - 6
docs/architecture.md

@@ -5,6 +5,7 @@
 |------|------|------|------|
 | 2.0 | 2025-09-14 | 增强架构文档 | Winston |
 | 2.1 | 2025-09-19 | 添加数据库定时备份策略 | Winston |
+| 2.2 | 2025-09-19 | 更新测试策略文档引用 | Winston |
 
 ## 介绍
 
@@ -19,6 +20,7 @@
 | 2024-09-14 | 1.0 | 初始现有系统分析 | Winston |
 | 2025-09-14 | 2.0 | 增强架构文档 | Winston |
 | 2025-09-19 | 2.1 | 添加数据库定时备份策略 | Winston |
+| 2025-09-19 | 2.2 | 更新测试策略文档引用 | Winston |
 
 ## 现有项目分析
 
@@ -87,7 +89,7 @@
 |------|------|------|-----------|-----------|
 | Vitest | 2.x | 单元测试框架 | 填补测试空白,确保代码质量,更好的TypeORM支持 | 集成到现有构建流程 |
 | Testing Library | 13.x | React组件测试 | 提供组件级测试能力 | 与React项目集成 |
-| Supertest | 6.x | API端点测试 | 验证API功能和集成 | 与Hono服务器集成 |
+| hono/testing | 内置 | API端点测试 | 验证API功能和集成 | Hono官方测试工具,更好的类型安全 |
 | node-cron | latest | 定时任务调度 | Node.js定时任务调度库 | 集成到应用启动流程 |
 
 ## 数据模型和Schema变更
@@ -268,14 +270,15 @@ d8d-starter/
 ### 现有标准合规性
 - **代码风格**: TypeScript严格模式,一致的缩进和命名
 - **linting规则**: 需要配置ESLint/Prettier
-- **测试模式**: 无现有测试框架配置
-- **文档风格**: 代码注释良好,但缺少完整文档
+- **测试模式**: 完整的测试框架已配置(Vitest + Testing Library + Playwright)
+- **文档风格**: 代码注释良好,测试策略文档完整
 
 ### 增强特定标准
-- **测试框架**: 添加Vitest + Testing Library + Supertest
+- **测试框架**: 使用Vitest + Testing Library + hono/testing + Playwright
 - **测试位置**: `__tests__` 文件夹与源码并列
 - **覆盖率目标**: 核心业务逻辑 > 80%
 - **测试类型**: 单元测试、集成测试、E2E测试
+- **测试策略**: 详见 [测试策略文档](./testing-strategy.md)
 
 ### 关键集成规则
 - **现有API兼容性**: 确保测试不破坏现有API契约
@@ -308,7 +311,7 @@ d8d-starter/
 ✅ **架构模式**: 分层架构、模块化设计验证通过
 ✅ **代码质量**: 类型安全、错误处理需要增强
 ✅ **安全性**: 基础安全措施存在,需要加强
-✅ **测试覆盖**: 需要添加完整测试基础设施
+✅ **测试覆盖**: 完整测试基础设施已建立(Vitest + Testing Library + Playwright)
 ✅ **部署策略**: Docker部署成熟稳定
 ✅ **备份策略**: 数据库定时备份方案已设计
 
@@ -348,11 +351,12 @@ d8d-starter/
 ### 相关文档
 - 现有架构文档: `docs/brownfield-architecture.md`
 - 产品需求文档: `docs/prd.md`
+- 测试策略文档: `docs/architecture/testing-strategy.md`
 - API文档: 通过 `/ui` 端点访问
 
 ### 联系方式
 - 架构师: Winston 🏗️
-- 最后更新: 2025-09-14
+- 最后更新: 2025-09-19
 
 ---
 

+ 1 - 1
docs/architecture/coding-standards.md

@@ -7,7 +7,7 @@
 - **文档风格**: 代码注释良好,但缺少完整文档
 
 ## 增强特定标准
-- **测试框架**: 添加Vitest + Testing Library + Supertest
+- **测试框架**: 添加Vitest + Testing Library + hono/testing
 - **测试位置**: `__tests__` 文件夹与源码并列
 - **覆盖率目标**: 核心业务逻辑 > 80%
 - **测试类型**: 单元测试、集成测试、E2E测试

+ 1 - 1
docs/architecture/tech-stack.md

@@ -18,5 +18,5 @@
 |------|------|------|-----------|-----------|
 | Vitest | 2.x | 单元测试框架 | 填补测试空白,确保代码质量,更好的TypeORM支持 | 集成到现有构建流程 |
 | Testing Library | 13.x | React组件测试 | 提供组件级测试能力 | 与React项目集成 |
-| Supertest | 6.x | API端点测试 | 验证API功能和集成 | 与Hono服务器集成 |
+| hono/testing | 内置 | API端点测试 | 验证API功能和集成 | Hono官方测试工具,更好的类型安全 |
 | node-cron | latest | 定时任务调度 | Node.js定时任务调度库 | 集成到应用启动流程 |

+ 282 - 0
docs/architecture/testing-strategy.md

@@ -0,0 +1,282 @@
+# 测试策略
+
+## 版本信息
+| 版本 | 日期 | 描述 | 作者 |
+|------|------|------|------|
+| 1.0 | 2025-09-19 | 初始测试策略文档 | Winston |
+
+## 概述
+
+本文档定义了D8D Starter项目的完整测试策略,基于现有的测试基础设施和最佳实践。测试策略遵循测试金字塔模型,确保代码质量、功能稳定性和系统可靠性。
+
+## 测试金字塔策略
+
+### 单元测试 (Unit Tests)
+- **范围**: 单个函数、类或组件
+- **目标**: 验证独立单元的correctness
+- **位置**: `src/**/__tests__/**/*.test.{ts,tsx}`
+- **框架**: Vitest
+- **覆盖率目标**: ≥ 80%
+- **执行频率**: 每次代码变更
+
+### 集成测试 (Integration Tests)
+- **范围**: 多个组件/服务协作
+- **目标**: 验证模块间集成和交互
+- **位置**: `src/**/__integration_tests__/**/*.integration.test.{ts,tsx}`
+- **框架**: Vitest + Testing Library + hono/testing
+- **覆盖率目标**: ≥ 60%
+- **执行频率**: 每次API变更
+
+### E2E测试 (End-to-End Tests)
+- **范围**: 完整用户流程
+- **目标**: 验证端到端业务流程
+- **位置**: `tests/e2e/**/*.test.{ts,tsx}`
+- **框架**: Playwright
+- **覆盖率目标**: 关键用户流程100%
+- **执行频率**: 每日或每次重大变更
+
+## 测试环境配置
+
+### 开发环境
+```typescript
+// vitest.config.ts - 开发环境配置
+export default defineConfig({
+  test: {
+    environment: 'node',
+    include: ['src/**/__tests__/**', 'src/**/__integration_tests__/**'],
+    setupFiles: ['./src/test/setup.ts'],
+    coverage: {
+      provider: 'v8',
+      thresholds: {
+        branches: 70,
+        functions: 70,
+        lines: 70,
+        statements: 70
+      }
+    }
+  }
+});
+```
+
+### CI/CD环境
+```yaml
+# GitHub Actions 测试配置
+name: Test Pipeline
+
+jobs:
+  unit-tests:
+    runs-on: ubuntu-latest
+    steps:
+      - run: npm run test:api
+      - run: npm run test:components
+
+  integration-tests:
+    runs-on: ubuntu-latest
+    services:
+      postgres:
+        image: postgres:15
+        env:
+          POSTGRES_PASSWORD: postgres
+          POSTGRES_DB: test_db
+    steps:
+      - run: npm run test:integration
+
+  e2e-tests:
+    runs-on: ubuntu-latest
+    steps:
+      - run: npm run test:e2e:chromium
+```
+
+## 测试覆盖率标准
+
+### 各层覆盖率要求
+| 测试类型 | 最低要求 | 目标要求 | 关键模块要求 |
+|----------|----------|----------|--------------|
+| 单元测试 | 70% | 80% | 90% |
+| 集成测试 | 50% | 60% | 70% |
+| E2E测试 | 关键流程100% | 主要流程80% | - |
+
+### 关键模块定义
+- **认证授权模块**: 必须达到90%单元测试覆盖率
+- **数据库操作模块**: 必须达到85%单元测试覆盖率
+- **核心业务逻辑**: 必须达到80%集成测试覆盖率
+- **用户管理功能**: 必须100% E2E测试覆盖
+
+## 测试数据管理
+
+### 测试数据策略
+```typescript
+// 测试数据工厂模式
+export function createTestUser(overrides = {}): User {
+  return {
+    id: 1,
+    username: 'testuser',
+    email: 'test@example.com',
+    createdAt: new Date(),
+    ...overrides
+  };
+}
+
+// 使用示例
+const adminUser = createTestUser({ role: 'admin' });
+const inactiveUser = createTestUser({ active: false });
+```
+
+### 数据库测试策略
+- **单元测试**: 使用内存数据库或完全mock
+- **集成测试**: 使用专用测试数据库,事务回滚
+- **E2E测试**: 使用接近生产环境的数据库
+
+### 数据清理策略
+1. **事务回滚** (推荐)
+2. **数据库清理** (每个测试后)
+3. **测试数据隔离** (使用唯一标识符)
+
+## 测试执行流程
+
+### 本地开发测试
+```bash
+# 运行所有测试
+npm test
+
+# 运行API测试
+npm run test:api
+
+# 运行组件测试
+npm run test:components
+
+# 运行集成测试
+npm run test:integration
+
+# 运行E2E测试
+npm run test:e2e:chromium
+
+# 生成覆盖率报告
+npm run test:coverage
+```
+
+### CI/CD流水线测试
+1. **代码推送** → 触发测试流水线
+2. **单元测试** → 快速反馈,必须通过
+3. **集成测试** → 验证模块集成,必须通过
+4. **E2E测试** → 验证完整流程,建议通过
+5. **覆盖率检查** → 满足最低要求
+6. **测试报告** → 生成详细报告
+
+## 质量门禁
+
+### 测试通过标准
+- ✅ 所有单元测试通过
+- ✅ 所有集成测试通过
+- ✅ 关键E2E测试通过
+- ✅ 覆盖率满足最低要求
+- ✅ 无性能回归
+- ✅ 安全测试通过
+
+### 失败处理流程
+1. **测试失败** → 立即通知开发团队
+2. **分析根本原因** → 确定是测试问题还是代码问题
+3. **优先修复** → 阻塞性问题必须立即修复
+4. **重新测试** → 修复后重新运行测试
+5. **文档更新** → 更新测试策略和案例
+
+## 安全测试策略
+
+### 安全测试要求
+- **输入验证测试**: 所有API端点必须测试SQL注入、XSS等攻击
+- **认证测试**: 测试令牌验证、权限控制
+- **数据保护**: 测试敏感数据泄露风险
+- **错误处理**: 测试错误信息是否泄露敏感数据
+
+### 安全测试工具
+- **OWASP ZAP**: 自动化安全扫描
+- **npm audit**: 依赖漏洞检查
+- **自定义安全测试**: 针对业务逻辑的安全测试
+
+## 性能测试策略
+
+### 性能测试要求
+- **API响应时间**: < 100ms (p95)
+- **数据库查询性能**: < 50ms (p95)
+- **并发用户数**: 支持100+并发用户
+- **资源使用**: CPU < 70%, 内存 < 80%
+
+### 性能测试工具
+- **k6**: 负载测试
+- **autocannon**: API性能测试
+- **Playwright**: E2E性能监控
+
+## 测试文档标准
+
+### 测试代码规范
+```typescript
+// 良好的测试示例
+describe('UserService', () => {
+  describe('createUser()', () => {
+    it('应该创建新用户并返回用户对象', async () => {
+      // Arrange
+      const userData = { username: 'testuser', email: 'test@example.com' };
+
+      // Act
+      const result = await userService.createUser(userData);
+
+      // Assert
+      expect(result).toHaveProperty('id');
+      expect(result.username).toBe('testuser');
+      expect(result.email).toBe('test@example.com');
+    });
+
+    it('应该拒绝重复的用户名', async () => {
+      // Arrange
+      const existingUser = await createTestUser({ username: 'existing' });
+
+      // Act & Assert
+      await expect(
+        userService.createUser({ username: 'existing', email: 'new@example.com' })
+      ).rejects.toThrow('用户名已存在');
+    });
+  });
+});
+```
+
+### 测试命名约定
+- **文件名**: `[module].test.ts` 或 `[module].integration.test.ts`
+- **描述**: 使用「应该...」格式描述测试行为
+- **用例**: 明确描述测试场景和预期结果
+
+## 监控和报告
+
+### 测试监控指标
+- **测试通过率**: > 95%
+- **测试执行时间**: < 10分钟(单元+集成)
+- **测试稳定性**: 无flaky tests
+- **覆盖率趋势**: 持续改进或保持
+
+### 测试报告要求
+- **HTML报告**: 详细的覆盖率报告
+- **JUnit报告**: CI/CD集成
+- **自定义报告**: 业务指标测试报告
+- **历史趋势**: 测试质量趋势分析
+
+## 附录
+
+### 相关文档
+- [集成测试最佳实践](../integration-testing-best-practices.md)
+- [编码标准](./coding-standards.md)
+- [API设计规范](./api-design-integration.md)
+
+### 工具版本
+- **Vitest**: 3.2.4
+- **Testing Library**: 16.3.0
+- **Playwright**: 1.55.0
+- **hono/testing**: 内置(Hono 4.8.5)
+
+### 更新日志
+| 日期 | 版本 | 描述 |
+|------|------|------|
+| 2025-09-19 | 1.0 | 初始版本,基于现有测试基础设施 |
+
+---
+
+**文档状态**: 正式版
+**下次评审**: 2025-12-19