Как ускорить тестирование сущности в 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. Проверить, установлены ли нужные ограничения (с использованием phpunit) можно так:

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

doctrine.orm.validator.unique’ not found

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

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Подтвердите, что Вы не бот — выберите человечка с поднятой рукой: