Задать вопрос
@helljack

Как лучше реализовать тесты на проекте с symfony и nextjs?

Есть проект, бэк на symfony, фронт на nextjs, все это крутится в docker
Решил написать e2e тесты на cypress, при запуске локально проблема в том, что окружение тестов в symfony на dev, так как проект поднят локально как dev, а хочется использовать окружение test как при запуске через phpunit

не понимаю как это реализовать, поднимать отдельный бэк и прокидывать туда env=test, так как локально уже запущен бэк с env=dev

И как через cypress сообщить nextjs, чтобы он запустился как test окружение
  • Вопрос задан
  • 126 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Учебный центр IBS
    ADM-019 Основы Docker
    1 неделя
    Далее
  • REBRAIN
    Docker Swarm
    1 месяц
    Далее
  • Слёрм
    Docker для админов и разработчиков
    4 недели
    Далее
Решения вопроса 1
opium
@opium
Просто люблю качественно работать
у меня на похожем стеке (symfony + react, но суть та же) просто отдельный docker-compose.test.yml где бэк стартует с APP_ENV=test, а фронту кидаешь нужные env через .env.test. поднимаешь рядом на других портах и cypress бьёт туда. не пытайся переключать env у запущенного стека — проще поднять второй рядом
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
abdulwasay
@abdulwasay
Cybersecurity | Penetration Testing | SOC 2
Поскольку Symfony в данной связке выступает исключительно как API, вам не нужно тестировать UI (шаблоны Twig). Фокус должен быть на бизнес-логике и API-эндпоинтах.

Юнит-тесты (Unit Tests): Используйте PHPUnit. Тестируйте отдельные сервисы, сущности (Entities) и DTO. Избегайте обращения к базе данных на этом этапе — используйте моки (Mocks).

Интеграционные тесты (Integration Tests): Проверяйте взаимодействие сервисов с базой данных или внешними API.

Тесты API (API/Functional Tests): Используйте встроенный Symfony WebTestCase или библиотеку API Platform TestClient (если используете API Platform). Эти тесты делают реальные HTTP-запросы к вашим контроллерам и проверяют JSON-ответы и коды статусов (200, 201, 400 и т.д.).

Совет по безопасности для тестов: Создайте отдельный конфигурационный файл config/packages/test/security.yaml, как мы обсуждали ранее, чтобы снизить cost для хеширования паролей в тестовой среде. Это ускорит запуск тестов в разы.

2. Тестирование Фронтенда (Next.js)
В Next.js разделяйте тестирование компонентов и логики выборки данных (Data Fetching).

Юнит- и компонентные тесты: Используйте Jest и React Testing Library. Тестируйте изолированные UI-компоненты (кнопки, формы, кастомные хуки). Проверяйте, правильно ли отображается состояние (State) и вызываются ли функции при кликах.

Мокирование API (API Mocking): Чтобы фронтенд-тесты не зависели от работающего бэкенда Symfony, используйте MSW (Mock Service Worker). Он перехватывает сетевые запросы Next.js и возвращает фейковые JSON-данные.

3. Сквозное тестирование (End-to-End / E2E) — Связующее звено
Это самый важный этап для проверки того, что Symfony и Next.js правильно работают вместе.

Инструменты: Playwright (рекомендуется) или Cypress.

Как это работает: Тест запускает реальный браузер, открывает ваш Next.js сайт, кликает по кнопкам, заполняет формы, отправляет запросы на настоящий (или тестовый) сервер Symfony и проверяет результат.

База данных: Для E2E тестов используйте отдельную тестовую базу данных PostgreSQL/MySQL, которая автоматически очищается или откатывается к начальному состоянию (Fixtures) перед каждым тестом (например, с помощью DAMADoctrineTestBundle на стороне Symfony).

Резюме: Идеальная пирамида тестирования
PHPUnit — для быстрой проверки логики в Symfony.

Symfony WebTestCase — для проверки корректности работы API эндпоинтов.

Jest + React Testing Library — для проверки интерфейса в Next.js.

Playwright — для финальной проверки сценариев "пользователь вошел в систему -> ввел данные -> данные сохранились в базе через Symfony".
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы