4.6 KiB
4.6 KiB
E2E 测试设置指南
前置条件
E2E测试需要以下服务运行:
1. PostgreSQL 数据库
测试使用独立的测试数据库,不会影响开发数据库。
# 确保 PostgreSQL 正在运行
# 创建测试数据库(如果还没有)
createdb rwa_identity_test
# 或使用 psql
psql -U postgres
CREATE DATABASE rwa_identity_test;
2. Redis (可选)
测试需要 Redis 用于 Token 管理。
# 启动 Redis(如果还没运行)
redis-server
# 或使用 Docker
docker run -d -p 6379:6379 redis:latest
3. 配置测试环境变量
已创建 .env.test 文件,包含测试环境配置:
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. 准备测试数据库
# 生成 Prisma Client
npm run prisma:generate
# 运行数据库迁移(针对测试数据库)
DATABASE_URL="postgresql://postgres:password@localhost:5432/rwa_identity_test?schema=public" npx prisma migrate dev
2. 运行 E2E 测试
# 设置环境变量并运行测试
NODE_ENV=test npm run test:e2e
3. 清理测试数据(可选)
E2E测试会在测试数据库中创建数据。如果需要清理:
# 重置测试数据库
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
解决方案:
- 确认 PostgreSQL 正在运行
- 检查
.env.test中的数据库连接字符串 - 确认测试数据库已创建
问题 2: Redis 连接失败
Error: connect ECONNREFUSED 127.0.0.1:6379
解决方案:
- 启动 Redis:
redis-server - 或临时禁用 Redis(需要修改代码)
问题 3: Kafka 警告信息
KafkaJS v2.0.0 switched default partitioner
说明: 这只是警告,不影响测试运行。Kafka 已被 mock,不会真实连接。
可以设置环境变量禁用警告:
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 测试覆盖了以下功能:
- ✅ 用户注册和账户创建
- ✅ 用户资料管理
- ✅ 设备管理(添加/删除/限制)
- ✅ Token 刷新
- ✅ 推荐系统
- ✅ KYC 认证
- ✅ 助记词恢复
- ✅ 数据验证
总计: 20+ 个测试用例
快速开始(一键命令)
如果你的环境已经配置好 PostgreSQL 和 Redis:
# 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 运行依赖服务:
# 启动 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
注意事项
- 测试数据隔离: 测试使用独立的测试数据库,不会影响开发环境
- Mock 服务: Kafka 和 SMS 已被 mock,测试速度更快
- 数据清理: 每次测试运行可能会在数据库中留下数据,定期清理测试数据库
- 并发问题: 避免同时运行多个测试实例,可能导致数据冲突
下一步
- 查看 AUTOMATED_TESTS_README.md 了解完整的测试体系
- 查看 TEST_AUTOMATION_GUIDE.md 了解如何编写新测试