Skip to content

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

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 test

End-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:

  1. Регистрация E2E-пользователя
  2. Создание организации
  3. Создание команды
  4. Создание проекта
  5. Создание примера задачи

Каждая спека логинится через UI-форму в beforeEach, обеспечивая реалистичное тестирование потока аутентификации.

CI

Пайплайн GitHub Actions:

typecheck → test → build
  • Проверка типов для всех пакетов
  • Модульные тесты выполняются параллельно
  • Сборка проверяет успешную компиляцию всех приложений