Как работает RefreshDatabase в тестах базы данных Laravel
При написание тестов базы данных в Laravel используется трейт RefreshDatabase.
С его помощью происходит сброс базу данных после каждого из ваших тестов, чтобы данные из предыдущего теста не мешали последующим тестам.
Если в тесте используется трейт RefreshDatabase,
1 2 3 4 5 6 |
... class ExampleTest extends TestCase { use RefreshDatabase; ... |
то вызывается метод refreshDatabase() из трейта.
Происходит удаление всех таблиц базы данных. И отрабатывают все миграции.
Если в классе теста указать свойство $seeder,
1 2 3 4 5 6 |
class ExampleTest extends TestCase { use RefreshDatabase; public $seeder = 'DatabaseSeeder'; |
то будет запущен соответствующий сидер (заполнитель/засеиватель) базы.
После этого стартует транзакция базы данных.
И регистрируется callback beforeApplicationDestroyed, в котором, все стартовавший транзакции откатываются.
Этот обратный вызов выполнится в методе tearDown, вызываемом после каждого теста.
Откат гарантирует, что база данных не будет изменена тестом, и следующий тест может быть запущен на чистой базе данных.
Подробнее на английском: https://dev.to/daniel_werner/under-the-hood-how-refreshdatabase-works-in-laravel-tests-2728
Recommended Posts
Не работает autocomplete в моделях Laravel
01.02.2022