rwadurian/backend/services/identity-service/docs/TESTING_STRATEGY.md

174 lines
4.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 测试策略说明
## 📊 测试类型对比
| 测试类型 | 需要的服务 | 运行环境 | 测试数量 | 运行命令 |
|---------|-----------|---------|---------|---------|
| **单元测试** | ❌ 无需外部服务 | ✅ 任何机器 | 46个 | `npm test` |
| **E2E测试** | ✅ PostgreSQL + Redis | ⚠️ 需要测试环境 | 20个 | `npm run test:e2e` |
## ✅ 单元测试(已完成且可运行)
### 特点
- **完全独立**不需要数据库、Redis、Kafka等任何外部服务
- **运行速度快**5-6秒完成所有测试
- **覆盖核心逻辑**:测试领域层的关键业务逻辑
- **开发机器友好**Windows/Mac/Linux均可运行
### 测试覆盖
1.**助记词值对象** (12个测试)
- 生成12个单词助记词
- 转换为seed
- 格式验证
- 相等性比较
2.**手机号值对象** (9个测试)
- 中国手机号格式验证
- 掩码显示 (138****8000)
- 无效格式拒绝
3.**钱包生成服务** (16个测试)
- 生成多链钱包KAVA/DST/BSC
- 助记词恢复
- 地址格式验证
- 加密解密
4.**用户账户聚合根** (9个测试)
- 账户创建
- 设备管理
- 业务规则验证
### 运行方式
```bash
# 运行所有单元测试
npm test
# 监听模式(开发时使用)
npm run test:watch
# 生成覆盖率报告
npm run test:cov
```
### 成功输出
```
PASS src/domain/value-objects/phone-number.vo.spec.ts
PASS src/domain/value-objects/mnemonic.vo.spec.ts
PASS src/domain/aggregates/user-account/user-account.spec.ts
PASS src/infrastructure/external/blockchain/wallet-generator.service.spec.ts
Test Suites: 4 passed, 4 total
Tests: 46 passed, 46 total
Time: 5.97 s
```
## ⚠️ E2E测试需要测试环境
### 为什么无法在开发机器运行?
E2E测试需要完整的运行环境
**必需的服务**
-**PostgreSQL** - 存储用户数据、钱包信息
-**Redis** - Token缓存、会话管理
- ❌ Kafka - 已Mock不需要
- ❌ SMS服务 - 已Mock不需要
**Windows开发机器现状**
- ❌ 没有PostgreSQL
- ❌ 没有Redis
- ❌ 没有Docker
### E2E测试覆盖的场景
如果有测试环境E2E测试会验证
1. 用户注册和账户创建
2. 用户资料管理(获取、更新)
3. 设备管理添加、删除、限制5个
4. Token刷新
5. 推荐系统
6. KYC认证
7. 助记词恢复
8. 数据验证
### 如何运行E2E测试
**方案1在有数据库的服务器上运行**
如果你的测试服务器或生产环境有PostgreSQL和Redis
```bash
# 1. 准备测试数据库
DATABASE_URL="postgresql://user:pass@localhost:5432/rwa_identity_test" npx prisma migrate dev
# 2. 确保Redis运行
redis-cli ping
# 3. 运行E2E测试
npm run test:e2e
```
**方案2使用Docker如果安装了Docker**
详见 [E2E_TEST_SETUP.md](E2E_TEST_SETUP.md)
## 🎯 推荐的测试流程
### 开发阶段Windows机器
**只运行单元测试**
```bash
npm test
```
单元测试已经覆盖了核心业务逻辑:
- 值对象验证
- 领域服务逻辑
- 聚合根业务规则
- 加密解密算法
**这对开发来说已经足够了!**
### 集成测试阶段(测试环境)
在部署到测试环境后,运行完整测试套件:
```bash
npm test # 单元测试
npm run test:e2e # E2E测试
```
### CI/CD流程
在持续集成环境中,建议:
```yaml
# .github/workflows/test.yml
- name: Unit Tests
run: npm test
- name: E2E Tests
run: npm run test:e2e
# 需要配置PostgreSQL和Redis服务
```
## 📝 总结
| 环境 | 运行的测试 | 覆盖率 |
|-----|-----------|--------|
| **开发机器** (Windows, 无数据库) | 单元测试 | ~60% 核心逻辑 |
| **测试环境** (有PostgreSQL+Redis) | 单元+E2E | ~85% 完整流程 |
| **CI/CD** | 单元+E2E | ~85% 自动化验证 |
## ✨ 当前状态
**单元测试**46个测试全部通过
⏸️ **E2E测试**20个测试需要测试环境才能运行
**对于开发阶段,单元测试已经足够验证代码质量!**
## 🔗 相关文档
- [AUTOMATED_TESTS_README.md](AUTOMATED_TESTS_README.md) - 快速开始指南
- [TEST_AUTOMATION_GUIDE.md](TEST_AUTOMATION_GUIDE.md) - 详细测试指南
- [E2E_TEST_SETUP.md](E2E_TEST_SETUP.md) - E2E测试环境配置