Skip to content

yx test ​

Запускает тестовые файлы YaoXiang. Тестовые файлы — это обычные исходные файлы .yx, в которых утверждения и ожидания объявляются через стандартный тестовый модуль std.test.

Использование ​

yx test [OPTIONS] [PATH]...

Обнаружение тестов ​

Если PATH не указан, область тестирования определяется в следующем порядке:

  1. Конфигурация patterns в секции [tool.test] файла ./yaoxiang.toml
  2. Если конфигурация не задана, по умолчанию обнаруживаются файлы tests/**/*.yx

При явном указании PATH запускаются только указанные пути (конфигурация patterns не считывается), после чего по-прежнему применяются шаблоны исключений из конфигурации и флаг --filter.

Каждый тестовый файл по объявленным ожиданиям делится на четыре категории (стабильная схема, предназначенная для использования в 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Запускать тестовые файлы параллельно (по одному worker'у на ядро CPU)нет

Коды возврата ​

Код возвратаОписание
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.

См. также ​