Тесты
Этот каталог содержит все тесты проекта: 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
- Связи ролей и прав
- Статусы заказов
- Методы оплаты
- Статусы оплаты
Эти данные загружаются автоматически при подготовке тестовой БД.
Рекомендации
- Используйте отдельную тестовую БД - никогда не запускайте интеграционные тесты на production БД
- Очищайте данные после тестов - тесты автоматически очищают созданные данные
- Используйте уникальные данные - в тестах используйте timestamp или UUID для уникальности
- Проверяйте реальные операции - интеграционные тесты должны проверять реальные операции с БД