6.8 KiB
6.8 KiB
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"
]
}
📝 测试最佳实践应用
✅ 已应用的最佳实践
-
AAA 模式 (Arrange-Act-Assert)
- 所有测试遵循清晰的 AAA 结构
-
测试隔离
- 使用
beforeEach清理数据 - 每个测试独立运行
- 使用
-
描述性命名
- 使用
describe和it清晰描述测试内容
- 使用
-
工厂模式
- 创建
createTestVersion()等辅助函数
- 创建
-
边界测试
- 测试有效输入、无效输入、边界条件
-
错误处理测试
- 验证异常抛出和错误消息
🚀 下一步建议
需要数据库才能完整运行的测试
以下测试需要真实的 PostgreSQL 数据库:
- Integration Tests (需要数据库)
- E2E Tests (需要数据库)
运行完整测试的前提条件
- 启动 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
- 运行 Prisma 迁移:
DATABASE_URL="postgresql://postgres:password@localhost:5432/admin_service_test" \
npm run prisma:migrate
- 运行所有测试:
npm test
📚 文档
TEST_GUIDE.md- 详细的测试指南TESTING_SUMMARY.md- 本文档README.md- 项目说明(可添加测试部分)
✨ 测试框架特点
优势
- 全面覆盖 - 单元/集成/E2E 三层测试
- DDD 友好 - 专门测试 Value Objects, Entities, Aggregates
- CI/CD 就绪 - 支持 Docker 和 WSL2 环境
- 开发友好 - 监听模式、覆盖率报告、详细文档
- 生产级别 - 遵循行业最佳实践
技术栈
- 测试框架: Jest
- 类型支持: TypeScript + ts-jest
- E2E 测试: Supertest
- NestJS 测试: @nestjs/testing
- 数据库: Prisma + PostgreSQL
- 容器化: Docker + Docker Compose
🎯 总结
admin-service 现在拥有一个完整的、生产级别的测试框架,包括:
- ✅ 9 个完整的测试文件
- ✅ ~100 个测试用例
- ✅ 单元/集成/E2E 三层测试
- ✅ Makefile 自动化命令
- ✅ WSL2 测试脚本
- ✅ Docker 测试配置
- ✅ 详细的测试文档
所有测试代码已就绪,可以立即运行!