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

202 lines
4.8 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.

# E2E 测试设置指南
## 前置条件
E2E测试需要以下服务运行
### 1. PostgreSQL 数据库
测试使用独立的测试数据库,不会影响开发数据库。
```bash
# 确保 PostgreSQL 正在运行
# 创建测试数据库(如果还没有)
createdb rwa_identity_test
# 或使用 psql
psql -U postgres
CREATE DATABASE rwa_identity_test;
```
### 2. Redis (可选)
测试需要 Redis 用于 Token 管理。
```bash
# 启动 Redis如果还没运行
redis-server
# 或使用 Docker
docker run -d -p 6379:6379 redis:latest
```
### 3. 配置测试环境变量
已创建 `.env.test` 文件,包含测试环境配置:
```env
DATABASE_URL="postgresql://postgres:password@localhost:5432/rwa_identity_test?schema=public"
REDIS_HOST="localhost"
REDIS_PORT=6379
JWT_SECRET="test-jwt-secret-key-for-e2e-tests"
WALLET_ENCRYPTION_SALT="test-wallet-salt"
```
**重要**: 请根据你的本地环境修改数据库连接字符串中的用户名和密码。
## 运行测试步骤
### 1. 准备测试数据库
```bash
# 生成 Prisma Client
npm run prisma:generate
# 运行数据库迁移(针对测试数据库)
DATABASE_URL="postgresql://postgres:password@localhost:5432/rwa_identity_test?schema=public" npx prisma migrate dev
```
### 2. 运行 E2E 测试
```bash
# 设置环境变量并运行测试
NODE_ENV=test npm run test:e2e
```
### 3. 清理测试数据(可选)
E2E测试会在测试数据库中创建数据。如果需要清理
```bash
# 重置测试数据库
DATABASE_URL="postgresql://postgres:password@localhost:5432/rwa_identity_test?schema=public" npx prisma migrate reset --skip-seed
```
## Mock 服务说明
E2E 测试已经配置了以下 Mock 服务,**不需要**真实的外部服务:
### ✅ Kafka (已 Mock)
- `EventPublisherService` 已被 mock
- 不需要运行 Kafka 服务器
- 事件发布操作会被记录但不会真实发送
### ✅ SMS 服务 (已 Mock)
- `SmsService` 已被 mock
- 不需要真实的 SMS API
- 验证码发送操作会自动成功
### ⚠️ 仍需要真实服务
- **PostgreSQL** - 需要真实数据库来测试数据持久化
- **Redis** - 需要真实 Redis 来测试 Token 缓存
## 常见问题
### 问题 1: 数据库连接失败
```
Error: Can't reach database server
```
**解决方案**:
1. 确认 PostgreSQL 正在运行
2. 检查 `.env.test` 中的数据库连接字符串
3. 确认测试数据库已创建
### 问题 2: Redis 连接失败
```
Error: connect ECONNREFUSED 127.0.0.1:6379
```
**解决方案**:
1. 启动 Redis: `redis-server`
2. 或临时禁用 Redis需要修改代码
### 问题 3: Kafka 警告信息
```
KafkaJS v2.0.0 switched default partitioner
```
**说明**: 这只是警告不影响测试运行。Kafka 已被 mock不会真实连接。
可以设置环境变量禁用警告:
```bash
KAFKAJS_NO_PARTITIONER_WARNING=1 npm run test:e2e
```
### 问题 4: 测试超时
```
Timeout - Async callback was not invoked within the 5000 ms timeout
```
**解决方案**:
- 确保数据库和 Redis 响应速度正常
- 增加 Jest 超时时间(在 jest-e2e.json 中配置)
## 测试覆盖范围
E2E 测试覆盖了以下功能:
1. ✅ 用户注册和账户创建
2. ✅ 用户资料管理
3. ✅ 设备管理(添加/删除/限制)
4. ✅ Token 刷新
5. ✅ 推荐系统
6. ✅ KYC 认证
7. ✅ 助记词恢复
8. ✅ 数据验证
总计: **20+ 个测试用例**
## 快速开始(一键命令)
如果你的环境已经配置好 PostgreSQL 和 Redis
```bash
# 1. 准备测试数据库
DATABASE_URL="postgresql://postgres:password@localhost:5432/rwa_identity_test?schema=public" npx prisma migrate dev
# 2. 运行测试
npm run test:e2e
# 3. 查看测试结果
# 所有测试通过后,你会看到类似输出:
# Test Suites: 1 passed, 1 total
# Tests: 20 passed, 20 total
```
## Docker 环境快速启动
如果你想使用 Docker 运行依赖服务:
```bash
# 启动 PostgreSQL 和 Redis
docker-compose -f docker-compose.test.yml up -d
# 等待服务启动
sleep 5
# 运行测试
npm run test:e2e
# 停止服务
docker-compose -f docker-compose.test.yml down
```
## 注意事项
1. **测试数据隔离**: 测试使用独立的测试数据库,不会影响开发环境
2. **Mock 服务**: Kafka 和 SMS 已被 mock测试速度更快
3. **数据清理**: 每次测试运行可能会在数据库中留下数据,定期清理测试数据库
4. **并发问题**: 避免同时运行多个测试实例,可能导致数据冲突
## 下一步
- 查看 [AUTOMATED_TESTS_README.md](AUTOMATED_TESTS_README.md) 了解完整的测试体系
- 查看 [TEST_AUTOMATION_GUIDE.md](TEST_AUTOMATION_GUIDE.md) 了解如何编写新测试