Files
zhuiguang-ai/.trae/specs/modules/testing.md
T

175 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 测试体系模块
## 概述
追光AI使用 Vitest 作为测试框架,已建立 5 个测试套件覆盖 132 个测试,目标覆盖率 80%+。测试文件位于 `src/__tests__/` 目录。
---
## 基础设施
### vitest.config.ts
```typescript
import { defineConfig } from "vitest/config";
import path from "path";
export default defineConfig({
test: {
globals: true,
environment: "node",
setupFiles: ["./vitest.setup.ts"],
include: ["src/__tests__/**/*.test.ts"],
coverage: {
provider: "v8",
reporter: ["text", "json", "html"],
thresholds: {
lines: 80,
branches: 80,
functions: 80,
statements: 80,
},
},
},
resolve: {
alias: { "@": path.resolve(__dirname, "./src") },
},
});
```
### vitest.setup.ts
- 全局 mock 配置
- Prisma mock 初始化
- 测试环境清理
### tsconfig 配置
```json
{
"compilerOptions": {
"types": ["vitest/globals"]
}
}
```
---
## 测试套件
### 1. level-config.test.ts
- **测试数量**: 28
- **覆盖**: `src/lib/level-config.ts`
- **测试内容**:
- 20个等级边界值检查
- 等级徽章映射
- 每日限额表
- 积分→等级转换
- 下一级积分计算
### 2. elo.test.ts
- **测试数量**: 24
- **覆盖**: ELO 评分计算逻辑
- **测试内容**:
- 基础 ELO 计算
- K因子变化
- 平局处理
- 极端分差
### 3. forum-hot.test.ts
- **测试数量**: 30
- **覆盖**: 论坛热度排序算法
- **测试内容**:
- 热度公式计算
- 时间衰减
- 回复加权
- 点赞加权
- 置顶优先
### 4. achievements.test.ts
- **测试数量**: 26
- **覆盖**: 成就系统逻辑
- **测试内容**:
- 成就解锁条件
- 进度计算
- 徽章授予
- 边界条件
### 5. points-reward.test.ts
- **测试数量**: 24
- **覆盖**: `src/lib/points-reward.ts`
- **测试内容**:
- 各操作积分奖励
- 每日上限检查
- Streak freeze 逻辑
- 商店购买消耗
- 等级升级触发
---
## 运行命令
```bash
# 运行所有测试
npx vitest run
# 监听模式
npx vitest
# 生成覆盖率报告
npx vitest run --coverage
# 运行特定测试文件
npx vitest run src/__tests__/level-config.test.ts
# UI 模式
npx vitest --ui
```
---
## 测试规范
### 文件命名
- 测试文件: `*.test.ts`
- 目录: `src/__tests__/`
### 测试结构
```typescript
import { describe, it, expect, beforeEach, vi } from "vitest";
describe("模块名", () => {
beforeEach(() => {
// setup
});
describe("功能点", () => {
it("应该满足某条件", () => {
// arrange
// act
// assert
});
it("应该处理边界情况", () => {
// ...
});
it("应该优雅处理错误", () => {
// ...
});
});
});
```
### 测试原则
- 每个 `it` 测试单一行为
- 使用 `describe` 组织相关测试
- Arrange → Act → Assert 三段式
- 覆盖正常路径 + 边界条件 + 错误路径
- 禁止 `.skip` 除非有明确 TODO 注释
- Mock 外部依赖(Prisma、外部 API)
### 覆盖率目标
| 指标 | 目标 |
|------|------|
| 行覆盖率 | ≥ 80% |
| 分支覆盖率 | ≥ 80% |
| 函数覆盖率 | ≥ 80% |
| 语句覆盖率 | ≥ 80% |