mirror of
https://github.com/Nikolay-Shirokov/cc-1c-skills.git
synced 2026-08-13 06:53:21 +03:00
test(skills): движковая матрица 1cv8/ibcmd в интеграционных тестах
Раннер: контекст платформы дорезолвит ibcmd.exe рядом с 1cv8.exe;
тест объявляет `engines: ['1cv8','ibcmd']` → одни и те же шаги прогоняются
на каждом движке ({v8path} подставляется в нужный exe), результаты помечаются
суффиксом [1cv8]/[ibcmd]. ibcmd-проход авто-skip, если ibcmd.exe нет.
Дефолт engines=['1cv8'] — прочие тесты не меняются.
Новые типы шагов: editFile (подстановочная замена) и assertContains
(проверка подстроки) — для round-trip проверок.
platform-config и platform-epf переведены в матрицу. Новый platform-partial:
частичная выгрузка/загрузка объекта с round-trip маркера на обоих движках.
README: раздел про интеграционные тесты, матрицу и типы шагов.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
parent
89496f535d
commit
ceacaa3509
+37
-1
@@ -31,6 +31,41 @@ node tests/skills/verify-snapshots.mjs --help # полный
|
||||
|
||||
Перепрогоняет навык из DSL кейса и грузит результат в 1С — отлавливает случаи, когда снапшоты обновили, но платформа уже не принимает выход.
|
||||
|
||||
## Интеграционные тесты
|
||||
|
||||
Помимо snapshot-кейсов есть многошаговые сценарии в `integration/<имя>.test.mjs` — цепочка навыков (init → compile → build → validate…), проверяющая что навыки работают вместе. Запуск:
|
||||
|
||||
```bash
|
||||
node tests/skills/runner.mjs integration # все интеграционные
|
||||
node tests/skills/runner.mjs integration/platform-partial # один сценарий
|
||||
```
|
||||
|
||||
Тест-модуль экспортирует `name`, `setup`, `steps` и опционально:
|
||||
|
||||
| Экспорт | Описание |
|
||||
|---|---|
|
||||
| `requiresPlatform` | `true` — нужен 1С (резолвится из `.v8-project.json`). Без платформы тест `○ skipped` |
|
||||
| `engines` | Массив движков для **матрицы**: по умолчанию `['1cv8']`. `['1cv8','ibcmd']` — те же шаги прогоняются на обоих движках |
|
||||
|
||||
### Движковая матрица (1cv8 / ibcmd)
|
||||
|
||||
Навыки `db-*`/`epf-*` выбирают движок по имени exe в `-V8Path` (опт-ин: `ibcmd.exe` → ibcmd, иначе DESIGNER). Тест с `engines: ['1cv8','ibcmd']` прогоняется по разу на каждый движок: на ibcmd-проходе плейсхолдер `{v8path}` подставляется в `ibcmd.exe`, на 1cv8 — в каталог `bin` (авто-резолв `1cv8.exe`). Результаты помечаются суффиксом id: `… [1cv8]` / `… [ibcmd]`.
|
||||
|
||||
ibcmd-проход автоматически `○ skipped`, если рядом с `1cv8.exe` нет `ibcmd.exe`. Шаги тестов при этом **не меняются** — добавляется одна строка `export const engines`. Так контракт «операция держится на обоих движках» кодируется без дублирования сценария.
|
||||
|
||||
### Типы шагов
|
||||
|
||||
Шаг — это запуск навыка (`script` + `args` + опц. `input`/`validate`) либо один из вспомогательных:
|
||||
|
||||
| Поле шага | Действие |
|
||||
|---|---|
|
||||
| `script` + `args` | Запустить навык. `args` поддерживают плейсхолдеры `{workDir}`, `{inputFile}`, `{v8path}` и др. |
|
||||
| `input` | JSON, передаётся навыку через temp-файл (`{inputFile}`) |
|
||||
| `writeFile` + `content` | Записать файл (путь — плейсхолдеры) |
|
||||
| `editFile` + `replace` + `with` | Подстановочная замена в файле (напр. вставить маркер). Падает, если паттерн не найден |
|
||||
| `assertContains` + `expect` | Упасть, если файл не содержит подстроку (проверка round-trip) |
|
||||
| `validate` | Доп. валидация навыком после шага (только с `--with-validation`) |
|
||||
|
||||
## Что делать при падении
|
||||
|
||||
1. Смотри **case id** в выводе — это путь к файлу кейса (можно перезапустить: `node runner.mjs <case-id>`)
|
||||
@@ -221,10 +256,11 @@ node tests/skills/runner.mjs cases/meta-compile/enum --update-snapshots # од
|
||||
|
||||
```
|
||||
tests/skills/
|
||||
runner.mjs # тест-раннер (snapshot-сравнение)
|
||||
runner.mjs # тест-раннер (snapshot-сравнение + интеграционные)
|
||||
verify-snapshots.mjs # платформенная верификация снапшотов
|
||||
README.md # этот файл
|
||||
.cache/ # кэш фикстур (в .gitignore)
|
||||
integration/ # многошаговые сценарии (*.test.mjs), в т.ч. движковая матрица 1cv8/ibcmd
|
||||
cases/
|
||||
<навык>/
|
||||
_skill.json # конфиг навыка
|
||||
|
||||
Reference in New Issue
Block a user