rwadurian/backend/services/admin-service/TESTING_SUMMARY.md

6.8 KiB
Raw Permalink Blame History

Admin Service 测试框架总结

📋 已完成的测试实施

1. 测试框架配置

  • Jest 配置: 已在 package.json 中配置完整的 Jest 测试环境
  • TypeScript 支持: 使用 ts-jest 进行 TypeScript 测试
  • 测试脚本: 添加了完整的 npm 测试脚本

2. 单元测试 (Unit Tests)

测试文件位置: test/unit/

Value Objects 测试

  • version-code.vo.spec.ts - 版本号验证和比较
  • version-name.vo.spec.ts - 语义化版本格式验证
  • file-size.vo.spec.ts - 文件大小验证和格式化
  • file-sha256.vo.spec.ts - SHA256 哈希验证

测试覆盖:

  • 值对象创建和验证
  • 边界条件测试
  • 错误处理
  • 相等性比较
  • 字符串转换

Entity 测试

  • app-version.entity.spec.ts - 应用版本实体

测试覆盖:

  • 实体创建create
  • 实体重建reconstitute
  • 业务方法disable, enable, setForceUpdate, setReleaseDate
  • 查询方法isNewerThan, shouldForceUpdate

Mapper 测试

  • app-version.mapper.spec.ts - 领域对象与持久化模型转换

测试覆盖:

  • Domain → Persistence 转换
  • Persistence → Domain 转换
  • 往返转换数据完整性
  • 空值处理

3. 集成测试 (Integration Tests)

测试文件位置: test/integration/

Repository 测试

  • app-version.repository.spec.ts

测试覆盖:

  • save() - 保存新版本
  • findById() - 根据 ID 查找
  • findLatestByPlatform() - 获取最新版本
  • findByPlatformAndVersionCode() - 精确查找
  • findAllByPlatform() - 列表查询
  • update() - 更新版本
  • toggleEnabled() - 启用/禁用
  • delete() - 删除版本

Handler 测试

  • create-version.handler.spec.ts

测试覆盖:

  • 创建 Android 版本
  • 创建 iOS 版本
  • 强制更新标志
  • 发布日期设置
  • 数据持久化验证

4. E2E 测试 (End-to-End Tests)

测试文件位置: test/e2e/

API Endpoints 测试

  • version.controller.spec.ts

测试覆盖:

  • POST /version - 创建新版本
    • Android 版本创建
    • iOS 版本创建
    • 输入验证版本号、版本名、URL、SHA256
  • GET /version/check-update - 检查更新
    • 有更新可用
    • 无更新可用
    • 强制更新标志
    • 输入验证
  • GET /version/:platform/latest - 获取最新版本
    • 成功获取
    • 404 处理

🛠️ 测试工具和脚本

Makefile 命令

make test              # 运行所有测试
make test-unit         # 只运行单元测试
make test-integration  # 只运行集成测试
make test-e2e          # 只运行 E2E 测试
make test-cov          # 生成覆盖率报告
make docker-test-all   # Docker 环境测试

NPM 脚本

npm test                # 运行所有测试
npm run test:unit       # 单元测试
npm run test:integration # 集成测试
npm run test:e2e        # E2E 测试
npm run test:cov        # 覆盖率
npm run test:watch      # 监听模式

WSL2 测试

PowerShell 脚本:

.\scripts\run-wsl-tests.ps1

Bash 脚本:

./scripts/test-in-wsl.sh

Docker 测试

单独 Docker 镜像:

docker build -f Dockerfile.test -t admin-service-test .
docker run --rm admin-service-test

Docker Compose:

docker-compose -f docker-compose.test.yml up --build
docker-compose -f docker-compose.test.yml down -v

📊 测试统计

测试文件统计

  • 单元测试文件: 6 个
  • 集成测试文件: 2 个
  • E2E 测试文件: 1 个
  • 总计: 9 个测试文件

测试用例统计(估算)

  • 单元测试用例: ~60 个
  • 集成测试用例: ~25 个
  • E2E 测试用例: ~15 个
  • 总计: ~100 个测试用例

覆盖率目标

  • Value Objects: 100%
  • Entities: 95%+
  • Mappers: 100%
  • Repositories: 90%+
  • Handlers: 90%+
  • Controllers: 85%+

🔧 配置文件

测试环境配置

  • .env.test - 测试环境变量
  • docker-compose.test.yml - Docker 测试编排
  • Dockerfile.test - Docker 测试镜像
  • package.json - Jest 配置

Jest 配置要点

{
  "testRegex": ".*\\.spec\\.ts$",
  "testEnvironment": "node",
  "collectCoverageFrom": [
    "src/**/*.(t|j)s",
    "!src/**/*.module.ts",
    "!src/main.ts",
    "!src/**/*.interface.ts",
    "!src/**/*.dto.ts",
    "!src/**/*.enum.ts"
  ]
}

📝 测试最佳实践应用

已应用的最佳实践

  1. AAA 模式 (Arrange-Act-Assert)

    • 所有测试遵循清晰的 AAA 结构
  2. 测试隔离

    • 使用 beforeEach 清理数据
    • 每个测试独立运行
  3. 描述性命名

    • 使用 describeit 清晰描述测试内容
  4. 工厂模式

    • 创建 createTestVersion() 等辅助函数
  5. 边界测试

    • 测试有效输入、无效输入、边界条件
  6. 错误处理测试

    • 验证异常抛出和错误消息

🚀 下一步建议

需要数据库才能完整运行的测试

以下测试需要真实的 PostgreSQL 数据库:

  • Integration Tests (需要数据库)
  • E2E Tests (需要数据库)

运行完整测试的前提条件

  1. 启动 PostgreSQL 数据库:
# 本地 PostgreSQL
createdb admin_service_test

# 或 Docker
docker run -d \
  --name admin-test-db \
  -e POSTGRES_PASSWORD=password \
  -e POSTGRES_DB=admin_service_test \
  -p 5432:5432 \
  postgres:16-alpine
  1. 运行 Prisma 迁移:
DATABASE_URL="postgresql://postgres:password@localhost:5432/admin_service_test" \
  npm run prisma:migrate
  1. 运行所有测试:
npm test

📚 文档

  • TEST_GUIDE.md - 详细的测试指南
  • TESTING_SUMMARY.md - 本文档
  • README.md - 项目说明(可添加测试部分)

测试框架特点

优势

  1. 全面覆盖 - 单元/集成/E2E 三层测试
  2. DDD 友好 - 专门测试 Value Objects, Entities, Aggregates
  3. CI/CD 就绪 - 支持 Docker 和 WSL2 环境
  4. 开发友好 - 监听模式、覆盖率报告、详细文档
  5. 生产级别 - 遵循行业最佳实践

技术栈

  • 测试框架: Jest
  • 类型支持: TypeScript + ts-jest
  • E2E 测试: Supertest
  • NestJS 测试: @nestjs/testing
  • 数据库: Prisma + PostgreSQL
  • 容器化: Docker + Docker Compose

🎯 总结

admin-service 现在拥有一个完整的、生产级别的测试框架,包括:

  • 9 个完整的测试文件
  • ~100 个测试用例
  • 单元/集成/E2E 三层测试
  • Makefile 自动化命令
  • WSL2 测试脚本
  • Docker 测试配置
  • 详细的测试文档

所有测试代码已就绪,可以立即运行!