本项目使用 Node.js 内置的 test runner 进行测试,通过 tsx 支持 TypeScript。
# 运行所有测试
npm test
# 监听模式(文件变化时自动重新运行)
npm run test:watch-
DescriptionValidator - 17 个测试
- 非必填字段验证
- 数据类型验证
- 字节长度验证(1024 字节限制)
- 多字节字符处理(中文、emoji)
- 边界情况测试
-
IdValidator - 18 个测试
- 必填字段验证
- 数据类型验证
- 字节长度验证(127 字节限制)
- 格式验证(小写、允许数字路径段作为数组下标)
- 唯一性验证
- 真实场景测试
-
NameValidator - 12 个测试
- 非必填字段验证
- 数据类型验证
- 字节长度验证(64 字节限制)
- 多字节字符处理
- 真实场景测试
-
ValueValidator - 37 个测试
- value 字段验证(字符串、16 字节限制)
- values 数组验证(BOOL 类型)
- values 数组验证(ENUM 类型)
- 通用验证(整数类型、name 长度)
- 真实场景测试
-
AccessModeValidator - 21 个测试
- access_mode = R(只读)规则验证
- access_mode = W(只写)规则验证
- access_mode = RW(读写)规则验证
- STRUCT 类型特殊处理
- 无效 access_mode 处理
- 真实场景测试
-
DataTypeValidator - 21 个测试
- data_type 和 bacnet_type 组合验证
- data_type 和 value_type 组合验证
- 所有数据类型组合测试(BOOL、NUMBER、ENUM、STRING/TEXT)
- 真实场景测试
- AccessModeValidator (字段)
- BacnetTypeValidator
- BacnetUnitTypeIdValidator
- BacnetUnitTypeValidator
- DataTypeValidator (字段)
- MaxLengthValidator
- ReferenceValidator (字段)
- UnitValidator (字段)
- ValueTypeValidator
- ReferenceValidator (关系)
- UnitValidator (关系)
- 总测试数: 126
- 通过: 126
- 失败: 0
- 测试套件: 48
项目提供了以下测试辅助函数(位于 tests/helpers.ts):
createTestCodecObject()- 创建基础测试对象generateStringWithByteLength()- 生成指定字节长度的字符串generateMultiByteString()- 生成包含多字节字符的字符串
- 在
tests/fields/或tests/relationships/目录下创建新的测试文件 - 文件命名格式:
<validator-name>.test.ts - 使用 Node.js test runner 的
describe和test函数 - 参考现有测试文件的结构和风格
import { describe, test } from 'node:test';
import assert from 'node:assert';
import { YourValidator } from '../../src/test/fields/your-validator';
import { createTestCodecObject } from '../helpers';
describe('YourValidator', () => {
describe('测试分组', () => {
test('测试用例描述', () => {
const item = createTestCodecObject({ /* 测试数据 */ });
const result = YourValidator.validate(item);
assert.strictEqual(result.valid, true);
});
});
});测试可以集成到 CI/CD 流程中:
# .github/workflows/test.yml
name: Test
on: [push, pull_request]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: 20
- run: npm install
- run: npm test- 全面覆盖: 每个验证器应测试所有验证规则
- 边界情况: 测试临界值(如长度限制的 ±1)
- 真实场景: 包含实际使用中的典型案例
- 清晰命名: 测试描述应清楚说明测试内容
- 独立性: 每个测试应该独立运行,不依赖其他测试