diff --git a/tests/skills/README.md b/tests/skills/README.md index 16923a35..92ca6db6 100644 --- a/tests/skills/README.md +++ b/tests/skills/README.md @@ -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'е: проверить diff --git a/tests/skills/verify-snapshots.mjs b/tests/skills/verify-snapshots.mjs index 0255b6b8..f2dd6ad3 100644 --- a/tests/skills/verify-snapshots.mjs +++ b/tests/skills/verify-snapshots.mjs @@ -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,