docs(tests): эталон при preRun фиксирует вход теста

README называл info/validate-навыки типичным случаем для noSnapshot: эталон
зафиксировал бы выход preRun, а не проверяемого навыка. Факт верный, вывод — нет.

Когда preRun собирает фикстуру, эталон фиксирует ВХОД теста. Без него дрейф
навыка-генератора меняет фикстуру молча, и ожидание вроде «Составной (6)»
начинает проверяться на другом объекте — либо падает без внятной причины, либо
сходится случайно и перестаёт что-либо проверять. meta-compile такой дрейф даёт
регулярно. Поэтому ни один из семи info-навыков noSnapshot не использует —
у всех эталоны, и это осознанно, а не упущение.

Правило сформулировано явно: есть preRun с генерацией фикстуры → эталон;
нет preRun или фикстура тривиальна → noSnapshot.

В шапке verify-snapshots отмечено, что он работает и с кейсами навыков, которые
сами ничего не пишут, — там он проверяет, что платформа принимает собранную
preRun фикстуру. Плюс предупреждение, что на кейсах setup: external проверка
вырождается в загрузку 1С собственной выгрузки: ~3 минуты на кейс без пользы.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-08-04 14:13:58 +03:00
co-authored by Claude Opus 5
parent 5141cf546d
commit ccd860ae89
2 changed files with 17 additions and 2 deletions
+13 -2
View File
@@ -293,8 +293,19 @@ ibcmd-проход автоматически `○ skipped`, если рядом
}
```
Типичный случай — навык ничего не пишет в рабочую директорию (info/validate): эталон зафиксировал бы
выход `preRun`, а не проверяемого навыка, и дублировал бы эталоны того навыка.
Типичный случай — навык ничего не пишет в рабочую директорию (info/validate) **и фикстуру не
собирает**: сверять нечего, проверяется stdout.
**Но если у такого кейса есть `preRun`, собирающий фикстуру, — эталон нужен.** Он фиксирует не
выход проверяемого навыка, а **вход теста**. Без него дрейф навыка-генератора меняет фикстуру
молча: ожидание вида `"stdoutContains": "Составной (6)"` начинает проверяться уже на другом
объекте — в лучшем случае кейс падает с необъяснимой причиной, в худшем сходится случайно и
перестаёт что-либо проверять. `meta-compile` такой дрейф даёт регулярно, задевая эталоны
десятков навыков, и ловят его именно эталоны. Поэтому info-навыки в `cases/*-info/` эталоны
имеют — это осознанно.
Правило: **есть `preRun` с генерацией фикстуры → эталон; нет `preRun` (или фикстура тривиальна)
`noSnapshot`.**
**Причина обязательна** — непустая строка; `true` не принимается и валит кейс. Смысл в том, что
отключение сверки должно стоить автору формулировки, а ревьюеру быть видно в diff'е: проверить
+4
View File
@@ -6,6 +6,10 @@
// role-compile, subsystem-compile, subsystem-edit, mxl-compile, template-add,
// help-add, cf-init, cf-edit, epf-init, meta-edit, interface-edit,
// cfe-init, cfe-borrow, cfe-patch-method
// Работает и с кейсами навыков, которые сами ничего не пишут (info/validate), если у кейса
// есть preRun: проверяется, что платформа принимает собранную им фикстуру.
// Для кейсов на `setup: external:` проверка вырождается — 1С грузит собственную выгрузку
// типовой конфигурации (~3 мин на кейс, ноль информации). Такие гонять через --case.
import { execFileSync } from 'child_process';
import { existsSync, mkdirSync, mkdtempSync, rmSync, readFileSync, writeFileSync,