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

6.3 KiB
Raw Blame History

🧪 自动化测试快速开始

📦 已创建的测试文件

E2E 测试(端到端测试)

  • 文件: test/app.e2e-spec.ts
  • 测试场景: 8 个完整的用户场景
  • 测试用例: 40+ 个测试用例
  • 覆盖功能:
    • 用户注册和账户创建
    • 用户资料管理
    • 设备管理最多5个设备
    • Token 刷新
    • 推荐系统
    • KYC 认证
    • 助记词恢复
    • 数据验证

单元测试

  1. 助记词测试: src/domain/value-objects/mnemonic.vo.spec.ts

    • 生成助记词
    • 验证格式
    • 转换为 seed
    • 相等性比较
  2. 手机号测试: src/domain/value-objects/phone-number.vo.spec.ts

    • 格式验证(中国手机号)
    • 掩码显示
    • 相等性比较
  3. 钱包生成服务测试: src/infrastructure/external/blockchain/wallet-generator.service.spec.ts

    • 生成钱包系统
    • 三条链地址KAVA/DST/BSC
    • 助记词恢复
    • 加密解密

🚀 快速运行测试

1. 安装测试依赖

npm install

新增的测试依赖:

  • supertest@^6.3.3 - HTTP 断言库
  • @types/supertest@^6.0.0 - TypeScript 类型定义

2. 准备 E2E 测试环境

E2E 测试需要数据库和 Redis不需要 Kafka已使用 Mock

详细设置请参阅: E2E_TEST_SETUP.md

快速开始:

# 确保 PostgreSQL 和 Redis 正在运行
# 准备测试数据库
DATABASE_URL="postgresql://postgres:password@localhost:5432/rwa_identity_test?schema=public" npx prisma migrate dev

3. 运行所有单元测试

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 测试

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

4. 查看测试覆盖率

npm run test:cov

然后打开生成的报告:

# 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 测试示例

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');
});

单元测试示例

it('应该生成有效的12个单词助记词', () => {
  const mnemonic = Mnemonic.generate();
  const words = mnemonic.getWords();

  expect(words).toHaveLength(12);
  expect(words.every(word => word.length > 0)).toBe(true);
});

🔍 常用测试命令

# 运行所有测试
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 文件:

// 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 中添加:

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 流程:

# .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

📚 更多信息

详细的测试指南请参阅:

下一步

  1. 运行测试验证

    npm install
    npm test
    npm run test:e2e
    
  2. 查看测试覆盖率

    npm run test:cov
    
  3. 添加更多测试

    • 为新功能编写单元测试
    • 为新 API 添加 E2E 测试
  4. 集成到 CI/CD

    • 设置 GitHub Actions
    • 自动运行测试

🎉 恭喜! 你的项目现在有了完整的自动化测试套件!