feat: 首次推送到Gitea - 完整项目代码 + 安全加固 + 知识库
This commit is contained in:
@@ -0,0 +1,174 @@
|
||||
# 测试体系模块
|
||||
|
||||
## 概述
|
||||
追光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% |
|
||||
Reference in New Issue
Block a user