docs(web-test): §16.1 — вложенные каталоги (что работает, что нет)

Зафиксирована конвенция:
- Discovery рекурсивный, путь попадает в отчёт.
- Per-folder hooks/config/context-default НЕ поддерживаются (by design).
- Группировку в отчётах делать через tags, не через путь.
- Сортировка по полному пути (`warehouse/01-x` после `sales/02-y`) —
  для глобального порядка нужны 3-значные префиксы или теги-фазы.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Nick Shirokov
2026-05-13 17:33:10 +03:00
parent 1eff62de42
commit a55195ab66
+38
View File
@@ -929,6 +929,44 @@ export default async function({ fillFields, getFormState, assert }, { type, fiel
Полный регресс — **19/19** (~9 минут на warm-стенде).
### 16.1. Вложенные каталоги
Discovery (`run.mjs:900`) обходит дерево `testDir` рекурсивно, поэтому
тесты можно раскладывать по подкаталогам без правок раннера:
```
tests/web-test/
sales/
01-order-create.test.mjs
02-order-post.test.mjs
warehouse/
01-receipt.test.mjs
```
**Что работает:**
| Аспект | Поведение |
|--------|-----------|
| Обнаружение | Рекурсивный walk; файлы/каталоги на `_`/`.` пропускаются |
| Порядок | `files.sort()` по полному относительному пути (`sales/01` идёт до `warehouse/01`) |
| `file` в отчёте | `relative(testDir, file)` с `/`, например `sales/01-order-create.test.mjs` |
| CLI-фильтр по пути | `node run.mjs test tests/web-test/sales/` запустит только подкаталог |
| Конкретный файл | `node run.mjs test tests/web-test/sales/01-order-create.test.mjs` |
**Что НЕ поддержано** (сознательно, чтобы держать модель простой):
- **Per-folder `_hooks.mjs`.** Раннер ищет `_hooks.mjs` только в корне `testDir`. Подкаталоги свои хуки не получают.
- **Per-folder `webtest.config.mjs`.** Тоже только в корне.
- **Suite-концепция в отчётах.** Allure suite labels из дерева каталогов не строятся; группируйте через `tags`.
- **Per-folder context default.** Каждый тест объявляет `context`/`contexts` сам; от пути контексты не наследуются.
**Конвенции:**
1. **Папки — для организации**, не для механики. Если хочется shared setup для «процесса» — клади в глобальный `_hooks.mjs.beforeAll` или в per-test `setup`/`teardown`.
2. **Группировку в отчётах** делай через `tags: ['sales']`, не через путь. Это даёт фильтрацию (`--tags=sales`) и работает в Allure/JUnit без дополнительной разметки.
3. **«Запустить только sales»** — двумя путями: `tests/web-test/sales/` (по каталогу) или `--tags=sales` (по тегу). Оба работают, выбирайте удобный.
4. **Сортировка по полному пути** означает, что `warehouse/01-x` запустится ПОСЛЕ `sales/02-y`. Для строгого глобального порядка используйте 3-значные префиксы (`010-`/`020-`/...) либо явные теги-фазы.
---
## 17. Дорожная карта реализации