yx test
Запускает тестовые файлы YaoXiang. Тестовые файлы — это обычные исходные файлы .yx, в которых утверждения и ожидания объявляются через стандартный тестовый модуль std.test.
Использование
yx test [OPTIONS] [PATH]...Обнаружение тестов
Если PATH не указан, область тестирования определяется в следующем порядке:
- Конфигурация
patternsв секции[tool.test]файла./yaoxiang.toml - Если конфигурация не задана, по умолчанию обнаруживаются файлы
tests/**/*.yx
При явном указании PATH запускаются только указанные пути (конфигурация patterns не считывается), после чего по-прежнему применяются шаблоны исключений из конфигурации и флаг --filter.
Каждый тестовый файл по объявленным ожиданиям делится на четыре категории (стабильная схема, предназначенная для использования в CI):
| Категория | Способ определения результата |
|---|---|
behavior | Файл выполняется; результат считается пройденным, если код возврата равен 0 |
compile-error | check возвращает ненулевой код, и все объявленные коды ошибок присутствуют — результат пройден (файл не запускается) |
runtime-error | check должен завершиться успешно, и выполнение должно завершиться с ошибкой; все объявленные коды ошибок присутствуют — результат пройден |
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.
См. также
yx check— статическая проверкаyx format— форматирование кода- RFC-036: тестовый фреймворк std.test — дизайн тестового фреймворка
- Руководство по интеграции с CI — интеграция с CI/CD
