mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-07-16 15:55:16 +03:00
feat(web-test): test-раннер пишет человеческий отчёт в stdout, JSON по --report=-
Команда `test` приведена к поведению тест-раннеров (jest/pytest/playwright): человеческий отчёт со сводкой в последней строке идёт в stdout, а машинный JSON/JUnit — опционально через `--report=-` (Unix-конвенция `-` = stdout), при этом прогресс уезжает в stderr. Убран безусловный дамп JSON в stdout, из-за которого `test … | tail` хоронил сводку под отчётом. - test.mjs: writer выбирается по режиму (--report=- → stderr-прогресс); развилка `-` в обеих ветках записи (json и junit), чтобы не плодить файл "-"; валидация: --report=- несовместимо с --format=allure (каталог, не поток). - util.mjs: строка --report=- в справке. - Документация (spec/guide/regress/README) приведена к фактическому английскому выводу и описывает матрицу потоков stdout/stderr. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -22,7 +22,8 @@ node run.mjs test [url] <dir|file> [флаги]
|
||||
| `--bail` | false | Остановиться при первом падении |
|
||||
| `--retry=N` | 0 | Повторить упавшие тесты N раз |
|
||||
| `--timeout=ms` | 30000 | Таймаут на тест (мс) |
|
||||
| `--report=path` | (нет) | Записать отчёт в файл (JSON или XML для `--format=junit`) |
|
||||
| `--report=path` | (нет) | Записать машинный отчёт в файл (JSON или XML для `--format=junit`) |
|
||||
| `--report=-` | (нет) | Машинный отчёт в stdout (`-` = stdout); человеческий прогресс уходит в stderr |
|
||||
| `--format=fmt` | json | Формат отчёта: `json` / `allure` / `junit` |
|
||||
| `--report-dir=path` | dirname(report) / testDir | Каталог для скриншотов, видео, Allure-результатов |
|
||||
| `--screenshot=strategy` | on-failure | `on-failure` / `every-step` / `off` |
|
||||
@@ -35,7 +36,20 @@ URL необязателен, если в каталоге тестов есть
|
||||
|
||||
- `--screenshot=<v>` принимается только `on-failure | every-step | off`; при невалидном значении движок выводит ошибку и завершается с ненулевым кодом до старта прогона.
|
||||
- `--format=<v>` принимается только `json | allure | junit`; иначе — завершение с ошибкой.
|
||||
- `--format=junit` требует `--report=<path>` (иначе некуда писать XML); иначе — завершение с ошибкой.
|
||||
- `--format=junit` требует `--report=<path>` (иначе некуда писать XML); иначе — завершение с ошибкой. Значение `-` (stdout) для junit допустимо.
|
||||
- `--report=-` (stdout) несовместимо с `--format=allure`: allure пишет каталог, а не поток; иначе — завершение с ошибкой.
|
||||
|
||||
### Потоки вывода (stdout / stderr)
|
||||
|
||||
`test` ведёт себя как тест-раннер (jest/pytest/playwright): человеческий отчёт со сводкой в конце идёт в **stdout**. Машинный отчёт (JSON/JUnit) включается отдельно флагом `--report`.
|
||||
|
||||
| Запуск | stdout | stderr | Файл |
|
||||
|--------|--------|--------|------|
|
||||
| `test …` (дефолт) | человеческий отчёт, **сводка последней строкой** | — | — |
|
||||
| `test … --report=file` | человеческий отчёт (виден прогресс + сводка) | — | JSON/JUnit в файл |
|
||||
| `test … --report=-` | **чистый машинный отчёт** (JSON или JUnit-XML) | человеческий прогресс | — |
|
||||
| `--format=allure …` | человеческий отчёт | — | артефакты allure в каталоге |
|
||||
| любой | — | — | exit code **0/1** всегда |
|
||||
|
||||
### Режим выполнения
|
||||
|
||||
@@ -753,9 +767,11 @@ await step('Кладовщик проверяет статус', async () => {
|
||||
|
||||
## 10. Консольный вывод
|
||||
|
||||
Вывод — на английском (статусы `passed/failed/skipped` зеркалят ключи JSON-отчёта и Allure/JUnit):
|
||||
|
||||
```
|
||||
web-test — http://localhost/app/ru_RU
|
||||
Запуск 25 тестов из tests/myapp/
|
||||
web-test -- http://localhost/app/ru_RU
|
||||
Running 25 tests from tests/myapp/
|
||||
|
||||
✓ Навигация по разделам (2.1s)
|
||||
✓ CRUD справочника Контрагенты (12.3s)
|
||||
@@ -766,13 +782,15 @@ web-test — http://localhost/app/ru_RU
|
||||
├ Открыть форму (2.0s)
|
||||
└ ✗ Сохранить пустую форму (6.1s)
|
||||
Ожидалось модальное окно ошибки, но форма сохранилась
|
||||
скриншот: error-shot-10.png
|
||||
screenshot: error-shot-10.png
|
||||
○ Составной тип (skip: не реализовано)
|
||||
|
||||
23 passed, 1 failed, 1 skipped (2m 0.5s)
|
||||
```
|
||||
|
||||
Для passed-тестов выводится одна строка `✓ name (duration)`. Шаги печатаются только для упавших — после строки `✗`, с отступом, плюс сообщение ошибки и путь к скриншоту. Полная картина по шагам — в JSON-отчёте (`--report=…`).
|
||||
Для passed-тестов выводится одна строка `✓ name (duration)`. Шаги печатаются только для упавших — после строки `✗`, с отступом, плюс сообщение ошибки и путь к скриншоту (`screenshot:`). Полная картина по шагам — в машинном отчёте (`--report=…` или `--report=-`).
|
||||
|
||||
По умолчанию этот отчёт идёт в **stdout** и заканчивается строкой сводки (`N passed, M failed, K skipped (Xs)`) — модель читает хвост stdout + exit code. В режиме `--report=-` (Unix-конвенция `-` = stdout) stdout занимает чистый машинный отчёт (JSON/JUnit), а человеческий прогресс уходит в stderr.
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user