|
@@ -0,0 +1,231 @@
|
|
|
|
|
+# 测试工具包迁移任务文档
|
|
|
|
|
+
|
|
|
|
|
+## 任务概述
|
|
|
|
|
+将 `web/tests/integration/server` 目录的API集成测试迁移到 `packages/server`,并通过创建共享测试工具包实现代码复用。
|
|
|
|
|
+
|
|
|
|
|
+## 目标
|
|
|
|
|
+- 创建共享测试工具包 `packages/test-utils`
|
|
|
|
|
+- 将服务器API集成测试迁移到 `packages/server/tests/integration/`
|
|
|
|
|
+- 保持现有测试功能完整性
|
|
|
|
|
+- 优化monorepo架构的测试组织
|
|
|
|
|
+
|
|
|
|
|
+## 阶段1:创建共享测试工具包
|
|
|
|
|
+
|
|
|
|
|
+### 1.1 创建 packages/test-utils 目录结构
|
|
|
|
|
+```
|
|
|
|
|
+packages/test-utils/
|
|
|
|
|
+├── package.json
|
|
|
|
|
+├── src/
|
|
|
|
|
+│ ├── index.ts
|
|
|
|
|
+│ ├── server/
|
|
|
|
|
+│ │ ├── integration-test-db.ts
|
|
|
|
|
+│ │ ├── integration-test-utils.ts
|
|
|
|
|
+│ │ ├── test-auth.ts
|
|
|
|
|
+│ │ └── test-db.ts
|
|
|
|
|
+│ └── client/
|
|
|
|
|
+│ ├── test-query.tsx
|
|
|
|
|
+│ ├── test-render.tsx
|
|
|
|
|
+│ └── test-router.tsx
|
|
|
|
|
+└── tsconfig.json
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 1.2 配置 package.json
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "name": "@d8d/test-utils",
|
|
|
|
|
+ "version": "1.0.0",
|
|
|
|
|
+ "type": "module",
|
|
|
|
|
+ "main": "./src/index.ts",
|
|
|
|
|
+ "types": "./src/index.ts",
|
|
|
|
|
+ "scripts": {
|
|
|
|
|
+ "build": "tsc",
|
|
|
|
|
+ "dev": "tsc --watch"
|
|
|
|
|
+ },
|
|
|
|
|
+ "dependencies": {
|
|
|
|
|
+ "@d8d/server": "workspace:*",
|
|
|
|
|
+ "@hono/node-server": "^1.13.0",
|
|
|
|
|
+ "@testing-library/react": "^14.1.2",
|
|
|
|
|
+ "@testing-library/jest-dom": "^6.1.4",
|
|
|
|
|
+ "@testing-library/user-event": "^14.5.1",
|
|
|
|
|
+ "@tanstack/react-query": "^5.8.4",
|
|
|
|
|
+ "react-router-dom": "^6.20.1",
|
|
|
|
|
+ "bcrypt": "^5.1.1",
|
|
|
|
|
+ "pg": "^8.11.3"
|
|
|
|
|
+ },
|
|
|
|
|
+ "devDependencies": {
|
|
|
|
|
+ "@types/bcrypt": "^5.0.2",
|
|
|
|
|
+ "@types/pg": "^8.10.9",
|
|
|
|
|
+ "typescript": "^5.3.3"
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 1.3 迁移测试工具类
|
|
|
|
|
+从 `web/tests/utils/` 迁移以下文件:
|
|
|
|
|
+- `integration-test-db.ts` → `packages/test-utils/src/server/integration-test-db.ts`
|
|
|
|
|
+- `integration-test-utils.ts` → `packages/test-utils/src/server/integration-test-utils.ts`
|
|
|
|
|
+- `test-auth.ts` → `packages/test-utils/src/server/test-auth.ts`
|
|
|
|
|
+- `test-db.ts` → `packages/test-utils/src/server/test-db.ts`
|
|
|
|
|
+- `test-query.tsx` → `packages/test-utils/src/client/test-query.tsx`
|
|
|
|
|
+- `test-render.tsx` → `packages/test-utils/src/client/test-render.tsx`
|
|
|
|
|
+- `test-router.tsx` → `packages/test-utils/src/client/test-router.tsx`
|
|
|
|
|
+
|
|
|
|
|
+### 1.4 更新导入路径
|
|
|
|
|
+调整所有工具类中的导入语句,使用workspace引用:
|
|
|
|
|
+```typescript
|
|
|
|
|
+// 从
|
|
|
|
|
+import { IntegrationTestDatabase } from '../../utils/integration-test-db';
|
|
|
|
|
+// 改为
|
|
|
|
|
+import { IntegrationTestDatabase } from '@d8d/test-utils/server/integration-test-db';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 阶段2:配置 packages/server 测试环境
|
|
|
|
|
+
|
|
|
|
|
+### 2.1 创建 packages/server/vitest.config.ts
|
|
|
|
|
+```typescript
|
|
|
|
|
+import { defineConfig } from 'vitest/config';
|
|
|
|
|
+
|
|
|
|
|
+export default defineConfig({
|
|
|
|
|
+ test: {
|
|
|
|
|
+ environment: 'node',
|
|
|
|
|
+ include: ['tests/**/*.test.ts'],
|
|
|
|
|
+ setupFiles: ['./tests/setup.ts'],
|
|
|
|
|
+ globals: true,
|
|
|
|
|
+ },
|
|
|
|
|
+});
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 2.2 创建 packages/server/tests/setup.ts
|
|
|
|
|
+配置测试环境,包括数据库连接和全局设置。
|
|
|
|
|
+
|
|
|
|
|
+### 2.3 更新 packages/server/package.json
|
|
|
|
|
+添加测试脚本和依赖:
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "scripts": {
|
|
|
|
|
+ "test": "vitest run",
|
|
|
|
|
+ "test:watch": "vitest",
|
|
|
|
|
+ "test:integration": "vitest run tests/integration/"
|
|
|
|
|
+ },
|
|
|
|
|
+ "devDependencies": {
|
|
|
|
|
+ "@d8d/test-utils": "workspace:*",
|
|
|
|
|
+ "vitest": "^1.2.2"
|
|
|
|
|
+ }
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 阶段3:迁移集成测试文件
|
|
|
|
|
+
|
|
|
|
|
+### 3.1 创建目标目录结构
|
|
|
|
|
+```
|
|
|
|
|
+packages/server/tests/
|
|
|
|
|
+├── integration/
|
|
|
|
|
+│ ├── auth.integration.test.ts
|
|
|
|
|
+│ ├── backup.integration.test.ts
|
|
|
|
|
+│ ├── files/
|
|
|
|
|
+│ │ ├── files.integration.test.ts
|
|
|
|
|
+│ │ └── minio.integration.test.ts
|
|
|
|
|
+│ └── users.integration.test.ts
|
|
|
|
|
+└── setup.ts
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 3.2 迁移测试文件
|
|
|
|
|
+从 `web/tests/integration/server/` 迁移以下文件:
|
|
|
|
|
+- `auth.integration.test.ts`
|
|
|
|
|
+- `backup.integration.test.ts`
|
|
|
|
|
+- `files/files.integration.test.ts`
|
|
|
|
|
+- `files/minio.integration.test.ts`
|
|
|
|
|
+- `users.integration.test.ts`
|
|
|
|
|
+
|
|
|
|
|
+### 3.3 更新测试文件导入
|
|
|
|
|
+调整所有测试文件中的导入语句:
|
|
|
|
|
+```typescript
|
|
|
|
|
+// 从
|
|
|
|
|
+import { app } from '@d8d/server';
|
|
|
|
|
+import { IntegrationTestDatabase } from '../../../utils/integration-test-db';
|
|
|
|
|
+// 改为
|
|
|
|
|
+import { app } from '../../src/app';
|
|
|
|
|
+import { IntegrationTestDatabase } from '@d8d/test-utils/server/integration-test-db';
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+## 阶段4:更新根项目配置
|
|
|
|
|
+
|
|
|
|
|
+### 4.1 更新根 package.json
|
|
|
|
|
+添加workspace引用:
|
|
|
|
|
+```json
|
|
|
|
|
+{
|
|
|
|
|
+ "workspaces": [
|
|
|
|
|
+ "packages/*",
|
|
|
|
|
+ "packages/test-utils"
|
|
|
|
|
+ ]
|
|
|
|
|
+}
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 4.2 更新根 vitest.config.ts
|
|
|
|
|
+移除已迁移的服务器集成测试配置。
|
|
|
|
|
+
|
|
|
|
|
+### 4.3 更新 web/package.json
|
|
|
|
|
+移除不再需要的测试工具依赖,添加对 `@d8d/test-utils` 的引用。
|
|
|
|
|
+
|
|
|
|
|
+## 阶段5:验证和清理
|
|
|
|
|
+
|
|
|
|
|
+### 5.1 运行测试验证
|
|
|
|
|
+```bash
|
|
|
|
|
+# 在 packages/server 中运行集成测试
|
|
|
|
|
+cd packages/server && pnpm test:integration
|
|
|
|
|
+
|
|
|
|
|
+# 在 web 中运行所有测试
|
|
|
|
|
+cd web && pnpm test
|
|
|
|
|
+```
|
|
|
|
|
+
|
|
|
|
|
+### 5.2 清理原目录
|
|
|
|
|
+删除 `web/tests/integration/server/` 目录。
|
|
|
|
|
+
|
|
|
|
|
+### 5.3 更新 CI/CD 配置
|
|
|
|
|
+确保CI流程能够运行新的测试结构。
|
|
|
|
|
+
|
|
|
|
|
+## 风险与缓解措施
|
|
|
|
|
+
|
|
|
|
|
+### 风险1:数据库连接问题
|
|
|
|
|
+- **缓解**:在迁移前备份数据库配置,确保新的测试环境使用相同的连接参数
|
|
|
|
|
+
|
|
|
|
|
+### 风险2:导入路径错误
|
|
|
|
|
+- **缓解**:使用TypeScript编译器检查所有导入路径,确保无错误
|
|
|
|
|
+
|
|
|
|
|
+### 风险3:测试工具功能差异
|
|
|
|
|
+- **缓解**:在迁移后立即运行所有测试,验证功能完整性
|
|
|
|
|
+
|
|
|
|
|
+### 风险4:CI/CD流程中断
|
|
|
|
|
+- **缓解**:在迁移前测试CI流程,确保新的测试命令正常工作
|
|
|
|
|
+
|
|
|
|
|
+## 验收标准
|
|
|
|
|
+
|
|
|
|
|
+- [ ] 所有服务器集成测试在 `packages/server` 中正常运行
|
|
|
|
|
+- [ ] 所有web项目测试继续正常运行
|
|
|
|
|
+- [ ] 共享测试工具包被正确引用
|
|
|
|
|
+- [ ] CI/CD流程无错误
|
|
|
|
|
+- [ ] 无重复代码或工具类
|
|
|
|
|
+- [ ] 代码导入路径正确
|
|
|
|
|
+
|
|
|
|
|
+## 时间估算
|
|
|
|
|
+
|
|
|
|
|
+- 阶段1:2-3小时
|
|
|
|
|
+- 阶段2:1-2小时
|
|
|
|
|
+- 阶段3:2-3小时
|
|
|
|
|
+- 阶段4:1小时
|
|
|
|
|
+- 阶段5:1小时
|
|
|
|
|
+
|
|
|
|
|
+**总计:7-10小时**
|
|
|
|
|
+
|
|
|
|
|
+## 后续优化建议
|
|
|
|
|
+
|
|
|
|
|
+1. 考虑将单元测试也迁移到对应的包中
|
|
|
|
|
+2. 创建统一的测试运行脚本
|
|
|
|
|
+3. 添加测试覆盖率报告
|
|
|
|
|
+4. 优化测试数据管理
|
|
|
|
|
+
|
|
|
|
|
+---
|
|
|
|
|
+
|
|
|
|
|
+**任务创建者**: Winston 🏗️
|
|
|
|
|
+**创建时间**: 2025-10-23
|
|
|
|
|
+**状态**: 待执行
|