
Тесты в Symfony: unit, functional или integration
Три типа тестов в Symfony решают разные задачи и стоят разного времени выполнения. Разбираем, когда брать чистый unit, когда поднимать ядро через KernelTestCase, а когда гонять HTTP-запросы.

Три типа тестов в Symfony решают разные задачи и стоят разного времени выполнения. Разбираем, когда брать чистый unit, когда поднимать ядро через KernelTestCase, а когда гонять HTTP-запросы.

Консольная команда синхронизации каталога зависала на пятой минуте и падала по памяти на 200 тысячах товаров. Разбираем, где в Symfony Console ломается наивный подход и что с этим делать.

Symfony Form решает валидацию и рендер, но упирается в проблемы на реальных проектах: медленный рендер, конфликт с API, боль с коллекциями. Разбираем, какой подход выбирать.

Doctrine ORM удобна, пока проект небольшой. На реальной нагрузке всплывают N+1, ленивые загрузки в цикле и запросы, которые тянут пол-базы. Чек-лист, что проверить до релиза.

Разбор рабочих приёмов Symfony Messenger: очереди, транспорты, повторы, идемпотентность и типичные ошибки, из-за которых сообщения теряются или обрабатываются дважды.

Autowiring закрывает 90% случаев, но остаётся хвост: как внедрить один из двух одинаковых интерфейсов, передать скалярный параметр и не собрать десять зависимостей ради одного метода.

Разбираем, как превратить кусок логики из проекта в отдельный установочный Symfony-бандл: где ломается автозагрузка, как правильно регистрировать сервисы и что учесть при семантическом версионировании.

Разбираем рабочую конфигурацию PHPUnit для Symfony 7.x: отдельная БД для тестов, WebTestCase, изоляция транзакций и типичные ошибки, из-за которых тесты начинают падать через раз.

Тесты Symfony падают то в CI, то локально, гоняются по десять минут и всё равно пропускают баги. Разбираем частые ошибки в организации тестов и что с ними делать.

Что проверить в тестах Symfony-приложения до релиза: изоляция базы, границы юнита и функционального теста, обработка внешних сервисов и проверки, которые ловят падения в продакшене раньше пользователей.

Консольная команда, которая нормально работает в разработке, под cron ломается тихо: съедает память, не отдаёт код возврата, дублирует запуски. Что проверить перед деплоем.

Атрибут AsCommand, наследование от Command и Invokable-команды из Symfony 7.3 решают одну задачу по-разному. Разбираем цену каждого подхода и когда какой уместен.