Тестирование валидации сущности symfony 4

Модульное тестирование валидации сущности в symfony 4

Можно тестировать корректную обработку валидных и на невалидных данных в функциональных тестах. Но это занимает много времени, так как загружается все приложение со всеми зависимостями, база данных и т.д. и т.п.
В документации symfony по этому поводу написано:

Don’t test the validation: it is applied by a listener that is not active in the test case and it relies on validation configuration. Instead, unit test your custom constraints directly.

(http://symfony.com/doc/current/form/unit_testing.html)

Поэтому тестирование можно упростить: загрузить валидатор, скормить ему объект с валидными (или невалидными) данными и проверить резальтат. Никакой авторизации, фикстур, заполнения форм и других телодвижений.
Допустим, у нас есть сущность MyEntity с полями name, description и ограничениями на name: не null, minLenght, maxLenght. Проверить, установлены ли нужные ограничения можно так:

Может возникнуть проблема со сложными ограничениями, например на уникальность. Если у вас доктрина, то во время выполнения теста возникнет ошибка

doctrine.orm.validator.unique’ not found

так как никакая orm в этот тесте не существует.
Это проблему можно решить так: разделить простые и сложные валидации по разным источникам(одни в аннотациях, другие в yaml), и в модульных тестах загружать и проверять только простые.
А сложные ограничения, с базой данных, проверять уже в функциональных. Выйгрыш во времени будет. Наверное, можно сделать заглушку для валидатора, но это уже другая история.

Как добавить новую опцию во все консольные команды в Symfony 3

Иногда требуется добавить опцию или аргумент в консольные команды, но прописывать в каждую команду, если их 100+ или это вендорные консольные команды , долго или невозможно. Хорошим решением в данном случае будет использование слушателя событий. (далее…)

Google PageSpeed Insights 100/100

Недавно решил оптимизировать один из своих сайтов под Google PageSpeed Insights. Конечно, хочется максимального результата 100/100, но не все так просто. Далее расскажу как добиться такого результата.

(далее…)

Symfony 2 и 3. Как использовать сервис-контейнер в конструкторе контроллера

Бывают ситуации, когда в конструкторе контроллера нужно вызвать сервис-контейнер, но выводится ошибка:

Есть простое решение данной проблемы.

(далее…)

Как убрать scroll на iOS

Мобильная версия сайта на iOS всегда отображается со скроллом, даже если страница имеет высоту 100vh и в css скролл отключен. Для отключения этого скролла пропишите в javascript следующую строку:

 

Сортировка массива объектов по свойству

Если есть массив объектов и необходимо его отсортировать по полю (или нескольким), то то для этого существует функция usort ([массив], callable функция).

Ниже описан пример сортировки массива объектов с помощью статического метода в классе объекта. (далее…)