# Тесты и CI

Источник: https://docs.novapoker.ru/dev/testing/
Дорожка: разработка
Сверено с кодом: Mon Aug 24
Код: repos/poker-api/apps/server/test, repos/poker-admin/test, repos/poker-player/test

---

## Что где

| Репозиторий | Инструменты | Тест-файлов | Что делает CI |
|---|---|---|---|
| `poker-api` | Jest + supertest, unit для `packages/rating` | 51 | `prisma generate` → сборка → тайпчек → тесты, PostgreSQL 16 сервисом |
| `poker-admin` | Vitest + Testing Library + msw | 20 | тесты → `tsc -b && vite build` |
| `poker-organizer` | jest-expo + Testing Library + msw | 24 | `tsc --noEmit` → тесты |
| `poker-player` | jest-expo + Testing Library + msw | 50 | `tsc --noEmit` → тесты |

CI — GitHub Actions, во всех четырёх репозиториях, на `push` в `main` и на pull
request. Число файлов посчитано 2026-08-24; число кейсов здесь не приводится,
чтобы не устаревало молча.

## Серверные тесты

E2E-стиль, **по файлу на модуль**, против реальной базы. Особенности, без которых
они ведут себя загадочно:

- **`maxWorkers: 1`.** Тесты идут последовательно.
- **База пересоздаётся в `globalSetup`**, своя на прогон. Общая база между
  параллельными прогонами — источник флейков, которые ловятся долго.
- **Сети в тестах нет.** Внешние интеграции подменены фейками: `FakeOtpChannel`,
  `FakePushSender`, `FakeBoss`.
- **Рассадка тестируема**, потому что `rng` в неё инъектируется.

## Фронтовые тесты

Сеть перехватывает msw, и **незамоканный запрос валит тест** — это осознанно:
молча ушедший в никуда запрос хуже красного теста.

Две вещи, на которых теряют время:

- **В Expo-приложениях нужен `--forceExit`.** Он уже прописан в скрипте `test`:
  без него открытые хендлы не дают процессу завершиться, и прогон висит до
  таймаута.
- **Фильтр `-t` с кириллицей молча не фильтрует.** Запуск вида
  `pnpm test -- -t "название"` с русским текстом не отберёт ничего и не пожалуется
  — прогонит всё либо ничего. Фильтровать надёжнее по имени файла.

## Что покрыто строже всего

`packages/rating` — 100% покрытия, и это условие, а не достижение: по этим
формулам считаются очки игроков. Подробнее — в [статье про рейтинг](https://docs.novapoker.ru/dev/rating.md).

## Что рядом

- [Окружения, стенды и деплой](https://docs.novapoker.ru/dev/environments.md) — что происходит после зелёного CI.
- [Карточки сервисов](https://docs.novapoker.ru/dev/poker-api.md) — команды запуска тестов по репозиториям.
