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