Хорошие практики тестирования в Laravel проектах?

Поделитесь пожалуйста вашими best practices по работе с тестами, особенно когда их много. По структурированию, именованию тестов и т. д.

Вопрос, возможно, выходит за рамки Laravel.
Из коробки фреймворк создает две директории: Feature и Unit.
Feature это нечто высокоуровневое. В видео Laracasts Jeffrey Way зовет их интеграционными, кто-то зовет их приемочными, где-то обзывают их smoke-тестами. У всех свои подходы и фреймворк в этом не ограничивает.

Создаете ли вы подпапки в Feature директории, например Controllers, Endpoints, Jobs...
Используете ли в Feature(и Unit) тестах несколько assert'ов или разбиваете на разные тесты для читаемости?

Как вы именуете unit-тесты?
Используете ли camel-case или через нижнее подчеркивание?

Ответы желательно поподробнее, чем: "Дело хозяйское. Как тебе удобно, так и делай". Оно и так понятно, что можно по-разному.
  • Вопрос задан
  • 1032 просмотра
Пригласить эксперта
Ответы на вопрос 2
Alex_Wells
@Alex_Wells
PHP/Kotlin
Feature - это end-to-end тесты. Ты берешь данные, отправляешь на эндпоинт и проверяешь ответ/статус выполнения задачи. Из этого следует, что никаких под-директорий там быть не может - максимум одна для API, одна для Web, и, если сильно хочется, то одна для CLI. В таких тестах НЕ должно быть моков, подмены зависимостей или чего-либо еще, что мешает полному тестированию эндпоинта от начала и до конца.

Обычно пишу по одному на каждый эндпоинт, типа GamesListTest для /api/games.

Unit - юнит тесты. Должны тестировать один класс и мокать остальные зависимости. Тут можете тестировать отдельно контроллеры, джобы, репозитории, сервисы и что-либо еще, что вам вздумается. Все депенденси этих классов нужно подменять и проверять входные аргументы (как можно тщательней, mockery + hamcrest-php).

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

Всегда использую snake_case - так читаемей. assert'ов может быть хоть миллион - за этим вообще не слежу. Разбиваю тесты на методы чисто по логике и нужде - как проще, так и делаю. Лично у меня тесты лежат в "модулях", а не в /tests, но дефолтная структура - неплохой вариант для начала.
Ответ написан
@EvgeniiR
https://github.com/EvgeniiR
Для меня в идеале структура папки unit идентична src, в src разбиение по функционалу типа /product /cart и т.п., никаких Controllers/ и Models/ со свалкой всех контроллеров и и т.п.
Ответ написан
Ваш ответ на вопрос

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

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