Тестирование
Planner использует многоуровневую стратегию тестирования: модульные тесты на Vitest и end-to-end тесты на Playwright.
Модульные тесты (Vitest)
Бэкенд
204 модульных теста, покрывающие:
- Аутентификация (регистрация, вход, обновление токена, сброс пароля, верификация email)
- CRUD организаций, команд и проектов
- Проверка квот и управление тарифами
- Доставка уведомлений
- Email-шаблоны
- Операции хранения файлов
bash
# Запуск модульных тестов бэкенда
cd apps/backend && pnpm test
# Режим отслеживания изменений
cd apps/backend && pnpm test:watchФронтенд
7 модульных тестов, покрывающих:
- Композаблы (useStatuses, usePriorities)
- Логика store
bash
# Запуск модульных тестов фронтенда
cd apps/frontend && pnpm testEnd-to-end тесты (Playwright)
63 E2E теста в 19 файлах спеков, покрывающих полный пользовательский путь.
Предварительные требования
- Бэкенд работает на порту 4000
- Фронтенд работает на порту 3000
- База данных заполнена тестовыми данными (через
global-setup.ts)
Структура тестов
apps/frontend/e2e/
├── config/ # Конфигурация Playwright
├── fixtures.ts # Инъекция Page Object'ов
├── global-setup.ts # Seed через API: пользователь, орг, команда, проект, задача
├── helpers/
│ ├── api.ts # Хелперы для raw-запросов
│ └── storage.ts # formatBytes, randomId
├── pages/ # 25 Page Object'ов
│ ├── login.page.ts
│ ├── dashboard.page.ts
│ ├── task-detail.page.ts
│ └── ... (ещё 22)
└── specs/ # 19 файлов спеков
├── auth.spec.ts
├── dashboard.spec.ts
├── organizations.spec.ts
├── teams.spec.ts
├── projects.spec.ts
├── tasks.spec.ts
├── chat.spec.ts
├── notifications.spec.ts
├── settings.spec.ts
├── calendar.spec.ts
├── invitations.spec.ts
├── video-rooms.spec.ts
├── admin-dashboard.spec.ts
├── admin-users.spec.ts
├── admin-roles.spec.ts
├── admin-groups.spec.ts
├── admin-orgs.spec.ts
├── admin-teams.spec.ts
└── admin-plans.spec.tsЗапуск E2E тестов
bash
# Без интерфейса
pnpm --filter @planner/frontend test:e2e
# С интерфейсом (интерактивная отладка)
pnpm --filter @planner/frontend test:e2e:uiМодель Page Object
Каждая страница инкапсулирована в Page Object с использованием нативных локаторов Playwright (getByRole, getByLabel, locator). Page Object'ы инжектируются в тесты через fixtures.ts:
typescript
test('должен создать задачу', async ({ taskDetailPage }) => {
await taskDetailPage.fillTitle('Новая задача')
await taskDetailPage.submit()
await expect(taskDetailPage.taskTitle).toHaveText('Новая задача')
})Глобальная настройка
global-setup.ts запускается перед всеми тестами и создаёт тестовые данные через API:
- Регистрация E2E-пользователя
- Создание организации
- Создание команды
- Создание проекта
- Создание примера задачи
Каждая спека логинится через UI-форму в beforeEach, обеспечивая реалистичное тестирование потока аутентификации.
CI
Пайплайн GitHub Actions:
typecheck → test → build- Проверка типов для всех пакетов
- Модульные тесты выполняются параллельно
- Сборка проверяет успешную компиляцию всех приложений