Skip to content

yx test ​

运行 YaoXiang 测试文件。测试文件是普通的 .yx 源文件,通过 std.test 标准测试模块声明断言与期望。

用法 ​

yx test [OPTIONS] [PATH]...

测试发现 ​

不指定 PATH 时,按以下顺序确定测试范围:

  1. ./yaoxiang.toml 中 [tool.test] 的 patterns 配置
  2. 未配置时,默认发现 tests/**/*.yx

指定 PATH 时只运行显式给出的路径(不读取 patterns 配置),之后仍应用配置中的 exclude 模式与 --filter。

每个测试文件按其声明的期望分为四类(schema 稳定,供 CI 消费):

类别判定方式
behavior运行文件,退出码为 0 即通过
compile-errorcheck 非零退出且声明的错误码全部出现即通过(不运行文件)
runtime-errorcheck 必须通过且运行必须失败,声明的错误码全部出现即通过
invalid文件声明不合法(如期望码与类别矛盾),不计入通过也不计入失败

期望声明文法见 RFC-036。

选项 ​

选项说明默认值
--filter <NAME>只运行文件名包含该子串的测试文件无
--fail-fast首个失败的测试文件运行完成后停止否
-v, --verbose显示每个测试文件捕获的 stdout/stderr否
--list仅列出发现的测试文件,不运行否
--no-progress抑制进度输出(标题与 PASS 行);失败与摘要始终显示否
--json输出 JSON 报告代替人类可读文本否
--parallel并行运行测试文件(每个 CPU 核一个 worker)否

退出码 ​

退出码说明
0全部通过(或未发现测试文件)
1存在失败,或运行出错

JSON 输出格式 ​

使用 --json 时,输出格式为:

json
{
  "summary": {
    "total": 3,
    "passed": 2,
    "failed": 1,
    "skipped": 0,
    "by_kind": { "behavior": 2, "compile-error": 0, "runtime-error": 1, "invalid": 0 },
    "time_secs": 0.512
  },
  "files": [
    {
      "file": "tests/div_zero_err.yx",
      "kind": "runtime-error",
      "passed": false,
      "time_secs": 0.103,
      "exit_code": 1,
      "stderr": "..."
    }
  ]
}
  • 失败文件附 exit_code 与 stderr(CI 取证);--verbose 时全部文件附 stdout/stderr
  • files 按路径排序,输出稳定
  • by_kind 固定四键(behavior / compile-error / runtime-error / invalid),零计数也输出

示例 ​

bash
# 运行项目全部测试
yx test

# 运行指定目录
yx test tests/yaoxiang/

# 只运行文件名包含 parser 的测试文件
yx test --filter parser

# 首个失败后停止,并显示捕获输出
yx test --fail-fast -v

# 仅列出发现的测试文件
yx test --list

# CI 模式:并行、无进度
yx test --parallel --no-progress

# 输出 JSON 报告
yx test --json > report.json

与 CI 集成 ​

yaml
# GitHub Actions
- name: Test
  run: yx test --parallel --no-progress

详细 CI 配置请参阅 CI 集成指南。

另请参阅 ​