- ICMP checker 的 type/configKey/YAML 配置键/接口属性名从 ping 改为 icmp - IcmpChecker 添加 platform 构造函数注入,修复 Windows 测试兼容性 - 前端 target 表格延迟列优化:标题简化为「延迟」,单位下移到单元格,宽度 80px - Drawer 概览页 Descriptions 添加 tableLayout=auto 收窄 label 宽度 - 同步更新 README.md、DEVELOPMENT.md、probes.example.yaml、JSON Schema 和全部测试
3.0 KiB
3.0 KiB
Capability: windows-test-compat
Purpose
确保测试在 Windows、macOS、Linux 平台上的兼容性,包括文件句柄释放后的目录清理重试机制和跨平台命令测试约定。
Requirements
Requirement: 测试临时目录清理 SHALL 支持重试
使用 SQLite 数据库的测试 SHALL 在 afterAll 中使用带重试的目录删除机制,确保在 Windows 上文件句柄未及时释放时不会导致测试失败。
Scenario: Windows 上 SQLite 文件句柄延迟释放
- WHEN 测试在 Windows 上运行,
store.close()后立即尝试删除临时目录 - THEN 删除操作 SHALL 自动重试(最多 3 次,间隔 200ms),直到成功或耗尽重试次数
Requirement: 命令检测器测试 SHALL 使用跨平台命令
命令检测器的测试 SHALL 使用 bun -e 脚本替代所有系统命令(包括 true、false、sleep、bash、echo、yes | head),确保测试在 Windows、macOS、Linux 三平台上行为一致。
Scenario: 进程退出码 0
- WHEN 测试需要一个正常退出的命令
- THEN 测试 SHALL 使用
bun -e "process.exit(0)"替代true
Scenario: 进程退出码非零
- WHEN 测试需要一个失败退出的命令
- THEN 测试 SHALL 使用
bun -e "process.exit(1)"替代false
Scenario: stdout 输出
- WHEN 测试需要一个输出文本到 stdout 的命令
- THEN 测试 SHALL 使用
bun -e "console.log('text')"替代echo text
Scenario: stderr 输出
- WHEN 测试需要一个输出文本到 stderr 的命令
- THEN 测试 SHALL 使用
bun -e "process.stderr.write('error\n')"替代bash -c "echo error >&2"
Scenario: 长时间运行命令
- WHEN 测试需要一个超时场景的长时间运行命令
- THEN 测试 SHALL 使用
bun -e "await Bun.sleep(10000)"替代sleep 10
Scenario: 大量输出
- WHEN 测试需要一个产生大量输出的命令
- THEN 测试 SHALL 使用
bun -e "process.stdout.write('y\n'.repeat(N))"替代bash -c "yes | head -N"
Scenario: 验证非 shell 模式下特殊字符不被展开
- WHEN 通过
Bun.spawn执行bun -e "console.log('*')"并检查 stdout 包含* - THEN 测试 SHALL 在 Windows、macOS 和 Linux 上均返回
matched: true
Requirement: probes.example.yaml 使用跨平台示例
probes.example.yaml 中的 cmd 类型示例 SHALL 使用跨平台命令(如 bun -e "..."、bun --version),不使用 Unix 专属命令(如 uname、ls /tmp、date)。
Scenario: 示例命令跨平台可执行
- WHEN 用户在 Windows、macOS 或 Linux 上直接使用 probes.example.yaml 中的 cmd 示例
- THEN 所有 cmd 示例 SHALL 能正常执行,不依赖平台特定命令
Scenario: ICMP checker 测试使用 platform 注入
- WHEN 在 Windows 上运行 ICMP checker 测试,mock 的 stdout 为 Unix 格式
- THEN 测试 SHALL 通过
new IcmpChecker("linux")构造 checker 实例,使 parsePingOutput 使用 Unix 解析器,确保测试在所有平台上通过