Files
store-platform/tests
2025-12-07 13:34:02 +03:00
..
2025-12-07 13:34:02 +03:00
2025-12-07 13:34:02 +03:00
2025-12-07 13:34:02 +03:00
2025-12-07 13:34:02 +03:00

Тесты

Этот каталог содержит все тесты проекта: unit-тесты и интеграционные тесты.

Структура

tests/
├── config/           # Конфигурация для тестов
│   ├── test-config.js            # Основной файл конфигурации
│   ├── env.example.txt          # Пример переменных окружения
│   └── README.md                 # Документация по конфигурации
├── dao/              # Unit-тесты для DAO классов
├── plugins/          # Unit-тесты для плагинов Fastify
├── routes/           # Тесты для HTTP роутов
│   ├── auth.test.js              # Unit-тесты (с моками)
│   ├── auth.integration.test.js  # Интеграционные тесты (с реальной БД)
│   └── README.md                 # Документация по интеграционным тестам
├── utils/            # Unit-тесты для утилит
├── fixtures/         # Тестовые данные (SQL, JSON и т.д.)
│   └── test-seed-data.sql        # Минимальные тестовые данные для БД
├── scripts/          # Скрипты для подготовки тестов
│   └── setup-test-db.js          # Скрипт подготовки тестовой БД
└── utils/            # Утилиты для тестов
    └── test-db-setup.js          # Утилита для работы с тестовой БД

Типы тестов

Unit-тесты

Тесты, которые используют моки и не требуют реальной БД:

  • Быстрые
  • Изолированные
  • Не требуют настройки БД
  • Примеры: tests/dao/*.test.js, tests/routes/auth.test.js

Интеграционные тесты

Тесты, которые используют реальную БД:

  • Проверяют реальные операции с БД
  • Требуют настройки тестовой БД
  • Медленнее unit-тестов
  • Примеры: tests/routes/*.integration.test.js

Запуск тестов

Все тесты

npm test

Только unit-тесты

npm run test:unit

Только интеграционные тесты

npm run test:integration

Подготовка тестовой БД

npm run test:setup

Подготовка к интеграционным тестам

1. Создание тестовой БД

CREATE DATABASE shop_platform_test;

2. Настройка переменных окружения

Переменные окружения можно настроить несколькими способами:

Способ 1: Переменные окружения системы

export TEST_POSTGRES_DB=shop_platform_test
export TEST_POSTGRES_USER=postgres
export TEST_POSTGRES_PASSWORD=postgres

Способ 2: Файл .env

Скопируйте tests/config/env.example.txt в .env и настройте переменные.

Способ 3: Использование значений по умолчанию

Если переменные не установлены, используются значения по умолчанию из tests/config/test-config.js.

Подробнее о конфигурации см. tests/config/README.md.

3. Подготовка БД

БД будет автоматически подготовлена при первом запуске интеграционных тестов, или вручную:

npm run test:setup

Утилиты для тестов

test-db-setup.js

Утилита для управления тестовой БД:

  • setupTestDatabase() - Инициализация схемы и загрузка тестовых данных
  • cleanupTestData() - Очистка тестовых данных
  • resetTestDatabase() - Полный сброс БД
  • isTestDatabaseInitialized() - Проверка инициализации
  • getTestPool() - Получение пула подключений
  • closeTestPool() - Закрытие пула подключений

Тестовые данные

Файл tests/fixtures/test-seed-data.sql содержит минимальный набор данных для интеграционных тестов:

  • Ресурсы (resources)
  • Действия (actions)
  • Права доступа (permissions)
  • Роли (roles): admin, customer
  • Связи ролей и прав
  • Статусы заказов
  • Методы оплаты
  • Статусы оплаты

Эти данные загружаются автоматически при подготовке тестовой БД.

Рекомендации

  1. Используйте отдельную тестовую БД - никогда не запускайте интеграционные тесты на production БД
  2. Очищайте данные после тестов - тесты автоматически очищают созданные данные
  3. Используйте уникальные данные - в тестах используйте timestamp или UUID для уникальности
  4. Проверяйте реальные операции - интеграционные тесты должны проверять реальные операции с БД