# 测试文档 本项目包含完整的测试套件,包括单元测试、集成测试和性能测试。 ## 目录结构 ``` __tests__/ ├── README.md # 测试说明文档 ├── setup.ts # 测试环境设置 ├── config/ │ └── testConfig.ts # 测试配置文件 ├── utils/ │ └── testHelpers.ts # 测试辅助工具 ├── connector/ │ └── futureConnector.test.ts # FutureConnector 单元测试 ├── integration/ │ └── futureConnector.integration.test.ts # 集成测试 └── performance/ └── futureConnector.performance.test.ts # 性能测试 ``` ## 测试类型 ### 1. 单元测试 (Unit Tests) - **位置**: `__tests__/connector/futureConnector.test.ts` - **目的**: 测试各个方法的逻辑正确性 - **特点**: 使用 Mock 数据,不依赖真实 API - **运行**: `yarn test` ### 2. 集成测试 (Integration Tests) - **位置**: `__tests__/integration/futureConnector.integration.test.ts` - **目的**: 测试与真实 Binance API 的集成 - **特点**: 需要有效的 API 密钥,会调用真实 API - **运行**: `yarn test:integration` ### 3. 性能测试 (Performance Tests) - **位置**: `__tests__/performance/futureConnector.performance.test.ts` - **目的**: 测试 API 调用的性能和并发处理能力 - **特点**: 测试响应时间、内存使用、并发处理等 - **运行**: `yarn test:performance` ## 环境配置 ### 1. 环境变量 创建 `.env` 文件并配置以下变量: ```env # API 配置 API_KEY=your_binance_api_key API_SECRET=your_binance_api_secret # 测试环境 NODE_ENV=development ``` ### 2. 测试配置 测试配置在 `__tests__/config/testConfig.ts` 中管理,支持不同环境: - **开发环境**: 启用所有测试类型 - **生产环境**: 禁用集成测试,只运行单元测试 - **CI/CD 环境**: 根据 CI 环境调整配置 ## 运行测试 ### 基本命令 ```bash # 运行所有测试 yarn test # 运行测试并监听文件变化 yarn test:watch # 运行测试并生成覆盖率报告 yarn test:coverage # 运行特定的测试文件 yarn test futureConnector.test.ts # 运行特定的测试套件 yarn test --testNamePattern="Constructor" ``` ### 高级命令 ```bash # 只运行单元测试 yarn test --testPathPattern="connector" # 只运行集成测试 yarn test --testPathPattern="integration" # 只运行性能测试 yarn test --testPathPattern="performance" # 运行测试并输出详细日志 yarn test --verbose # 运行测试并生成 JUnit 报告 yarn test --reporters=default --reporters=jest-junit ``` ## 测试覆盖率 运行覆盖率测试: ```bash yarn test:coverage ``` 覆盖率报告将生成在 `coverage/` 目录下,包括: - **HTML 报告**: `coverage/lcov-report/index.html` - **LCOV 报告**: `coverage/lcov.info` - **控制台输出**: 显示总体覆盖率 ### 覆盖率目标 - **语句覆盖率**: > 90% - **分支覆盖率**: > 85% - **函数覆盖率**: > 95% - **行覆盖率**: > 90% ## 测试最佳实践 ### 1. 编写测试 ```typescript describe('MethodName', () => { test('should handle normal case', async () => { // 准备测试数据 const mockData = TestHelpers.createMockAssets() // 设置 Mock mockClient.restAPI.method.mockResolvedValue({ data: jest.fn().mockResolvedValue(mockData), }) // 执行测试 const result = await connector.method() // 验证结果 expect(result).toBeDefined() expect(result).toHaveLength(2) }) test('should handle error case', async () => { // 设置错误 Mock mockClient.restAPI.method.mockRejectedValue(new Error('API Error')) // 执行测试 const result = await connector.method() // 验证错误处理 expect(result).toEqual([]) }) }) ``` ### 2. 使用测试辅助工具 ```typescript import { TestHelpers } from '../utils/testHelpers' // 生成测试数据 const mockAssets = TestHelpers.createMockAssets() const mockPositions = TestHelpers.createMockPositions() // 验证数据格式 TestHelpers.validateAssetData(asset) TestHelpers.validatePositionData(position) // 重试机制 const result = await TestHelpers.retry( () => connector.getAssetsInfo(), 3, // 重试次数 1000, // 重试间隔 ) ``` ### 3. 使用测试配置 ```typescript import { getTestConfig, getSafeTestPrice } from '../config/testConfig' const config = getTestConfig() const safePrice = getSafeTestPrice('BTCUSDT', 'buy') ``` ## 常见问题 ### 1. API 密钥问题 **问题**: 集成测试失败,提示 API 密钥无效 **解决**: - 检查 `.env` 文件中的 API 密钥是否正确 - 确认 API 密钥有足够的权限 - 检查 API 密钥是否过期 ### 2. 网络问题 **问题**: 测试超时或网络错误 **解决**: - 检查网络连接 - 增加测试超时时间 - 使用重试机制 ### 3. 内存问题 **问题**: 性能测试内存使用过高 **解决**: - 检查是否有内存泄漏 - 减少并发测试数量 - 优化测试数据大小 ### 4. 速率限制 **问题**: API 调用被限制 **解决**: - 减少并发调用数量 - 增加调用间隔 - 使用测试网 API ## 持续集成 ### GitHub Actions 配置 ```yaml name: Tests on: [push, pull_request] jobs: test: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions/setup-node@v2 with: node-version: '18' - run: yarn install - run: yarn test:coverage - uses: codecov/codecov-action@v1 ``` ### 测试报告 测试完成后会生成以下报告: 1. **Jest 报告**: 控制台输出 2. **覆盖率报告**: HTML 和 LCOV 格式 3. **性能报告**: 响应时间和内存使用统计 ## 维护 ### 更新测试 1. 当添加新功能时,同时添加相应的测试 2. 当修改现有功能时,更新相关测试 3. 定期检查测试覆盖率,确保达到目标 ### 测试数据管理 1. 使用 `TestHelpers` 生成一致的测试数据 2. 避免硬编码测试数据 3. 定期更新模拟数据以匹配真实 API 响应 ### 性能监控 1. 定期运行性能测试 2. 监控测试执行时间 3. 设置性能基准并跟踪变化