# 测试策略说明

## 📊 测试类型对比

| 测试类型 | 需要的服务 | 运行环境 | 测试数量 | 运行命令 |
|---------|-----------|---------|---------|---------|
| **单元测试** | ❌ 无需外部服务 | ✅ 任何机器 | 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测试环境配置
