# 🧪 自动化测试快速开始 > **💡 重要提示**: > - ✅ **单元测试**: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 - 自动运行测试 --- 🎉 **恭喜!** 你的项目现在有了完整的自动化测试套件!