Перейти к содержанию

Тестирование

Как запускается тестовый набор проекта — команды и цифры ниже исполнялись в этом окружении (лог прогона — в отчёте валидации в корне репо 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).

Точечный запуск:

... python -m pytest tests/test_auth.py tests/test_sync_api.py -q --no-cov

Покрытие подключено через --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 на уровне вью не автоматизированы