Не нужно вручную заполнять базы данных в тестах

Источник: «You don't need to manually run seeders in your tests»
Почему использование свойства $seed лучше ручного заполнения базы данных? Просто ли это избавление от необходимости писать несколько строк кода?

Laravel TestCase поддерживает свойство $seed. Если установить его в true, а также использовать трейт RefreshDatabase, то база данных будет автоматически заполнена сидером по умолчанию.

Эта функция не так уж и нова. Она была добавлена в Laravel 8. Но я все ещё сталкиваюсь с приложениями, где она не используется. Вместо этого $this->seed() вызывается вручную в тесте или в базовом методе setup().

Почему использование этого нового свойства лучше? Просто ли это избавление от необходимости писать несколько строк кода? Вовсе нет! На самом деле это огромное улучшение производительности.

Трейт RefreshDatabase запускает каждый тест с помощью artisan migrate:fresh, а затем оборачивает каждый отдельный тест в транзакцию базы данных. В конце выполнения каждого отдельного теста транзакция откатывается, так что каждый тест выполняется в чистой базе данных. Это помогает существенно сократить количество ошибок в тестах.

Но при использовании свойства $seed запускается artisan migrate:fresh --seed. Таким образом, сидер запускается только один раз для всего теста, а не для каждого отдельного теста в наборе. По мере роста набора тестов вы будете экономить все больше и больше времени, используя эту удобную функцию.

Если вам интересно, что мы поместили в сидер, ждите завтрашней статьи...

Дополнительные материалы

Предыдущая Статья

Как установить/обновить PHP 8.3 на MacOS с помощью Homebrew

Следующая Статья

Изучение новых методов массивов из ECMAScript 2023