69 lines
1.9 KiB
Markdown
69 lines
1.9 KiB
Markdown
|
|
# 测试规范 (Testing Specification)
|
||
|
|
|
||
|
|
## 1. 测试框架与工具
|
||
|
|
|
||
|
|
### 1.1 技术栈
|
||
|
|
|
||
|
|
| 工具 | 版本 | 用途 |
|
||
|
|
|------|------|------|
|
||
|
|
| Vitest | 4.0.18 | 单元测试框架 |
|
||
|
|
| Node.js | 18+(推荐) | 运行时环境 |
|
||
|
|
| npm | 9+ | 包管理 |
|
||
|
|
|
||
|
|
## 2. 单元测试
|
||
|
|
|
||
|
|
### 2.1 Parser 测试 (heartbeat_parser.test.js)
|
||
|
|
|
||
|
|
**覆盖对象**: `src/processor/heartbeatParser.js`
|
||
|
|
|
||
|
|
**测试覆盖矩阵**:
|
||
|
|
|
||
|
|
| 测试编号 | 测试项 | 输入 | 期望结果 | 状态 |
|
||
|
|
|---------|--------|------|---------|------|
|
||
|
|
| T1 | 有效消息 | 4 个正确字段 | parsed object | ✓ 通过 |
|
||
|
|
| T2 | 无效 JSON | 格式错误 | null | ✓ 通过 |
|
||
|
|
| T3 | 缺失字段 | 无 ts_ms | null | ✓ 通过 |
|
||
|
|
| T4 | 类型错误 | ts_ms 为字符串 | null | ✓ 通过 |
|
||
|
|
| T5 | 空值 | hotel_id="" | null | ✓ 通过 |
|
||
|
|
| T6 | 空值 | hotel_id=" " | null | ✓ 通过 |
|
||
|
|
| T7 | 格式错误 | non-digit hotel_id | null | ✓ 通过 |
|
||
|
|
| T8 | 多字节字符 | 中文 room_id | parsed object | ✓ 通过 |
|
||
|
|
|
||
|
|
### 2.2 Buffer 测试 (heartbeat_buffer.test.js)
|
||
|
|
|
||
|
|
**覆盖对象**: `src/buffer/heartbeatBuffer.js`
|
||
|
|
|
||
|
|
**测试覆盖矩阵**:
|
||
|
|
|
||
|
|
| 测试编号 | 测试项 | 场景 | 期望结果 | 状态 |
|
||
|
|
|---------|--------|------|---------|------|
|
||
|
|
| B1 | 重复去重 | 同键 3 条消息 | 保留 ts_ms=1100 | ✓ 通过 |
|
||
|
|
| B2 | 分离条目 | 不同键 | 缓冲大小=2 | ✓ 通过 |
|
||
|
|
| B3 | 无效拒绝 | null 输入 | 缓冲size=0 | ✓ 通过 |
|
||
|
|
| B4 | 失败恢复 | DB 异常 | 记录重入队 | ✓ 通过 |
|
||
|
|
| B5 | 冷却期 | 30s 内重写 | 写入被跳过 | ✓ 通过 |
|
||
|
|
| B6 | 冷却期保留 | 30s 内多次更新 | 最新值被保留 | ✓ 通过 |
|
||
|
|
|
||
|
|
## 3. 测试执行
|
||
|
|
|
||
|
|
### 3.1 运行所有测试
|
||
|
|
|
||
|
|
```bash
|
||
|
|
npm run test
|
||
|
|
```
|
||
|
|
|
||
|
|
**输出示例**:
|
||
|
|
```
|
||
|
|
✓ tests/heartbeat_parser.test.js (8)
|
||
|
|
✓ tests/heartbeat_buffer.test.js (6)
|
||
|
|
|
||
|
|
Test Files 2 passed (2)
|
||
|
|
Tests 14 passed (14)
|
||
|
|
|
||
|
|
Duration 234ms
|
||
|
|
```
|
||
|
|
|
||
|
|
---
|
||
|
|
|
||
|
|
**上次修订**: 2026-03-11
|