# 集成测试规范

## 测试范围

### 1. 模块集成测试
- 模块间接口调用
- 数据流传递
- 状态同步机制
- 事件处理流程

### 2. 系统集成测试
- 前后端交互
- 数据持久化
- 消息通信
- 进程间通信

### 3. 环境集成测试
- 浏览器环境
- Node.js环境
- Electron环境
- 混合环境

## 测试框架

### 1. 基础框架
- Jest作为主测试框架
- Supertest用于HTTP接口测试
- TestCafe用于浏览器端测试
- Spectron用于Electron测试

### 2. 辅助工具
- Mock Service Worker用于API模拟
- Docker用于环境隔离
- Faker.js用于测试数据生成
- Istanbul用于覆盖率统计

## 测试编写规范

### 1. 文件组织
```
tests/
├── integration/           # 集成测试目录
│   ├── browser/          # 浏览器环境测试
│   ├── node/            # Node.js环境测试
│   ├── electron/        # Electron环境测试
│   └── e2e/             # 端到端测试
└── __fixtures__/        # 测试数据和工具
```

### 2. 命名规范
- 文件名：`模块名.integration.test.ts`
- 测试套件：描述测试场景
- 测试用例：描述预期行为

### 3. 测试结构
```typescript
describe('模块集成测试', () => {
  beforeAll(async () => {
    // 环境设置
  });

  afterAll(async () => {
    // 环境清理
  });

  describe('场景描述', () => {
    beforeEach(async () => {
      // 测试数据准备
    });

    afterEach(async () => {
      // 数据清理
    });

    test('应该正确处理XX情况', async () => {
      // 测试实现
    });
  });
});
```

## 测试环境配置

### 1. Jest配置
```javascript
// jest.config.integration.js
module.exports = {
  preset: 'ts-jest',
  testEnvironment: 'node',
  testMatch: ['**/*.integration.test.ts'],
  setupFilesAfterEnv: ['./tests/setup.integration.ts'],
  globalSetup: './tests/global-setup.ts',
  globalTeardown: './tests/global-teardown.ts',
};
```

### 2. 环境变量
```bash
# .env.test
TEST_DB_URL=mongodb://localhost:27017/test
TEST_REDIS_URL=redis://localhost:6379
TEST_API_URL=http://localhost:3000
```

### 3. Docker配置
```yaml
# docker-compose.test.yml
version: '3'
services:
  mongodb:
    image: mongo:latest
    ports:
      - "27017:27017"
  redis:
    image: redis:latest
    ports:
      - "6379:6379"
```

## 测试执行

### 1. 执行命令
```bash
# 运行所有集成测试
pnpm test:integration

# 运行特定环境测试
pnpm test:integration:browser
pnpm test:integration:node
pnpm test:integration:electron

# 运行端到端测试
pnpm test:e2e
```

### 2. CI/CD配置
```yaml
integration_test:
  stage: test
  script:
    - docker-compose -f docker-compose.test.yml up -d
    - pnpm test:integration
  coverage: /All files[^|]*\|[^|]*\s+([\d\.]+)/
```

## 最佳实践

### 1. 测试原则
- 关注模块间交互
- 验证集成点
- 测试真实场景
- 避免重复单元测试

### 2. 性能考虑
- 合理使用并行测试
- 优化测试数据量
- 复用测试环境
- 清理测试资源

### 3. 维护建议
- 保持测试独立性
- 及时更新测试用例
- 定期检查覆盖率
- 优化执行时间 