Тестирование¶
Как запускается тестовый набор проекта — команды и цифры ниже исполнялись в этом окружении (лог прогона — в отчёте валидации в корне репо wiki).
Бэкенд (pytest)¶
- Фреймворк: pytest + FastAPI TestClient; SQLite in-memory с шимами
компиляции JSONB/сетевых типов (
tests/conftest.py) — внешние сервисы не нужны - Расположение:
backend/tests/(~290 файлов); EE-специфика помечена маркеромeeи автоматически пропускается в сборке Core - Запуск в Docker (тот же образ, что в CI):
docker build -q -f backend/Dockerfile.test -t umbryx-test .
docker run --rm -e APP_ENV=test umbryx-test \
sh -c "cd /app && python -m pytest -q --no-cov"
Наблюдавшиеся полные прогоны (2026-10-30): EE — 7474 passed / 2
skipped; Core — 7215 passed / 169 skipped (собрано тестов: 7476
против 7384 — в EE входят дополнительные файлы тестов для функций,
отсутствующих в Core). Из 169 пропусков Core 167 — маркеры издания
EE: в сборке EE эти тесты выполняются. Остальные 2 пропуска общие для
обеих сборок: проверка границы лицензирования SSO (тестовый стенд
работает без лицензии) и фильтр JSONB .contains(), требующий
PostgreSQL (тестовый комплект использует SQLite).
Точечный запуск:
Покрытие подключено через --cov=app (addopts в pytest.ini).
Фронтенд (Vitest)¶
cd frontend && npm ci && npm run test # набор vitest
npm run lint && npm run build # eslint + production-сборка
Линт / форматирование¶
- Бэкенд: ruff + black, длина строки 100 (
backend/pyproject.toml) - Фронтенд: ESLint flat config
- Pre-commit хуки настроены (
.pre-commit-config.yaml)
Демо-стенд (функциональные/ручные проверки)¶
scripts/demo-stand.sh up|seed|down поднимает изолированный
одноразовый инстанс с синтетическими данными на порту 8899 —
санкционированный способ переснимать скриншоты и смоук-тестить
воркфлоу, не трогая живой инстанс.
Известные ограничения¶
- Тесты идут на SQLite, а не PostgreSQL — диалектная специфика (upsert'ы, индексация JSONB) покрыта guards кода, а не набором
- Фронтенд-тесты покрывают стор/логику; E2E на уровне вью не автоматизированы