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

286 lines
6.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.

# 🧪 自动化测试快速开始
> **💡 重要提示**
> - ✅ **单元测试**46个测试可在任何机器运行无需数据库→ **开发时使用**
> - ⚠️ **E2E测试**20个测试需要PostgreSQL和Redis → **测试环境使用**
>
> 📖 详细说明请查看:[TESTING_STRATEGY.md](TESTING_STRATEGY.md)
## 📦 已创建的测试文件
### ✅ E2E 测试(端到端测试)
- **文件**: [test/app.e2e-spec.ts](test/app.e2e-spec.ts)
- **测试场景**: 8 个完整的用户场景
- **测试用例**: 40+ 个测试用例
- **覆盖功能**:
- 用户注册和账户创建
- 用户资料管理
- 设备管理最多5个设备
- Token 刷新
- 推荐系统
- KYC 认证
- 助记词恢复
- 数据验证
### ✅ 单元测试
1. **助记词测试**: [src/domain/value-objects/mnemonic.vo.spec.ts](src/domain/value-objects/mnemonic.vo.spec.ts)
- 生成助记词
- 验证格式
- 转换为 seed
- 相等性比较
2. **手机号测试**: [src/domain/value-objects/phone-number.vo.spec.ts](src/domain/value-objects/phone-number.vo.spec.ts)
- 格式验证(中国手机号)
- 掩码显示
- 相等性比较
3. **钱包生成服务测试**: [src/infrastructure/external/blockchain/wallet-generator.service.spec.ts](src/infrastructure/external/blockchain/wallet-generator.service.spec.ts)
- 生成钱包系统
- 三条链地址KAVA/DST/BSC
- 助记词恢复
- 加密解密
## 🚀 快速运行测试
### 1. 安装测试依赖
```bash
npm install
```
新增的测试依赖:
- `supertest@^6.3.3` - HTTP 断言库
- `@types/supertest@^6.0.0` - TypeScript 类型定义
### 2. 准备 E2E 测试环境
E2E 测试需要数据库和 Redis**不需要** Kafka已使用 Mock
详细设置请参阅: [E2E_TEST_SETUP.md](E2E_TEST_SETUP.md)
快速开始:
```bash
# 确保 PostgreSQL 和 Redis 正在运行
# 准备测试数据库
DATABASE_URL="postgresql://postgres:password@localhost:5432/rwa_identity_test?schema=public" npx prisma migrate dev
```
### 3. 运行所有单元测试
```bash
npm test
```
**预期输出**:
```
PASS src/domain/value-objects/mnemonic.vo.spec.ts
PASS src/domain/value-objects/phone-number.vo.spec.ts
PASS src/infrastructure/external/blockchain/wallet-generator.service.spec.ts
Test Suites: 3 passed, 3 total
Tests: 30+ passed, 30+ total
```
### 4. 运行 E2E 测试
```bash
npm run test:e2e
```
**注意**: E2E 测试需要:
- ✅ PostgreSQL 数据库(测试数据库)
- ✅ Redis 服务
-**不需要** Kafka已使用 Mock
-**不需要** SMS 服务(已使用 Mock
**预期输出**:
```
PASS test/app.e2e-spec.ts
Identity Service E2E Tests
✓ 应该成功自动创建账户 (150ms)
✓ 应该获取个人资料 (50ms)
✓ 应该更新个人资料 (60ms)
✓ 应该获取设备列表 (45ms)
...
Test Suites: 1 passed, 1 total
Tests: 20+ passed, 20+ total
```
如果遇到问题,请参阅 [E2E_TEST_SETUP.md](E2E_TEST_SETUP.md)
### 4. 查看测试覆盖率
```bash
npm run test:cov
```
然后打开生成的报告:
```bash
# Windows
start coverage/lcov-report/index.html
# macOS
open coverage/lcov-report/index.html
# Linux
xdg-open coverage/lcov-report/index.html
```
## 📊 测试统计
### E2E 测试覆盖
- ✅ 8 个主要测试场景
- ✅ 40+ 个具体测试用例
- ✅ 覆盖所有 14 个 API 端点
- ✅ 验证所有关键业务逻辑
### 单元测试覆盖
- ✅ 核心值对象Mnemonic, PhoneNumber
- ✅ 关键服务WalletGenerator
- ✅ 领域聚合根UserAccount - 已存在)
## 🎯 测试示例
### E2E 测试示例
```typescript
it('应该成功自动创建账户', async () => {
const response = await request(app.getHttpServer())
.post('/api/v1/user/auto-create')
.send({
deviceId: 'test-device-001',
deviceName: 'Test Device',
provinceCode: '110000',
cityCode: '110100',
})
.expect(201);
expect(response.body.data).toHaveProperty('userId');
expect(response.body.data).toHaveProperty('mnemonic');
expect(response.body.data).toHaveProperty('accessToken');
});
```
### 单元测试示例
```typescript
it('应该生成有效的12个单词助记词', () => {
const mnemonic = Mnemonic.generate();
const words = mnemonic.getWords();
expect(words).toHaveLength(12);
expect(words.every(word => word.length > 0)).toBe(true);
});
```
## 🔍 常用测试命令
```bash
# 运行所有测试
npm test
# 监听模式(自动重新运行)
npm run test:watch
# 生成覆盖率报告
npm run test:cov
# 运行 E2E 测试
npm run test:e2e
# 运行特定测试文件
npm test -- mnemonic.vo.spec
# 运行特定测试用例
npm test -- --testNamePattern="应该生成有效的助记词"
# 调试模式
npm run test:debug
```
## 📝 测试编写指南
### 添加新的单元测试
在源文件同目录创建 `.spec.ts` 文件:
```typescript
// src/your-module/your-class.spec.ts
import { YourClass } from './your-class';
describe('YourClass', () => {
it('should do something', () => {
const instance = new YourClass();
const result = instance.doSomething();
expect(result).toBe('expected');
});
});
```
### 添加新的 E2E 测试场景
`test/app.e2e-spec.ts` 中添加:
```typescript
describe('新功能测试', () => {
it('should test new feature', async () => {
const response = await request(app.getHttpServer())
.post('/api/v1/new-endpoint')
.set('Authorization', `Bearer ${accessToken}`)
.send({ data: 'test' })
.expect(201);
expect(response.body.success).toBe(true);
});
});
```
## 🎬 CI/CD 集成
测试可以轻松集成到 CI/CD 流程:
```yaml
# .github/workflows/test.yml
name: Tests
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: '20'
- run: npm ci
- run: npm run prisma:generate
- run: npm test
- run: npm run test:e2e
```
## 📚 更多信息
详细的测试指南请参阅:
- [TEST_AUTOMATION_GUIDE.md](TEST_AUTOMATION_GUIDE.md) - 完整的自动化测试文档
- [TESTING_GUIDE.md](TESTING_GUIDE.md) - 手动测试指南
## ⚡ 下一步
1. **运行测试验证**
```bash
npm install
npm test
npm run test:e2e
```
2. **查看测试覆盖率**
```bash
npm run test:cov
```
3. **添加更多测试**
- 为新功能编写单元测试
- 为新 API 添加 E2E 测试
4. **集成到 CI/CD**
- 设置 GitHub Actions
- 自动运行测试
---
🎉 **恭喜!** 你的项目现在有了完整的自动化测试套件!