РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1176 of 1392 menu

RefreshDatabase

Трейт RefreshDatabase используется в тестовых классах Laravel для управления состоянием базы данных. Он автоматически запускает миграции и сбрасывает базу данных перед каждым тестом, гарантируя, что каждый тест начинается с чистой базы данных. Трейт подключается к классу теста с помощью директивы use.

Синтаксис

Для использования трейта необходимо подключить его в классе теста, который наследуется от TestCase:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; class UserTest extends TestCase { use RefreshDatabase; } ?>

Пример

Давайте напишем тест, который проверяет создание пользователя. Трейт RefreshDatabase автоматически очистит базу данных перед выполнением теста:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; use App\Models\User; class UserTest extends TestCase { use RefreshDatabase; public function test_user_creation() { $res = User::create([ 'name' => 'John Doe', 'email' => 'john@example.com', 'password' => bcrypt('password') ]); $this->assertDatabaseHas('users', [ 'email' => 'john@example.com' ]); echo 'User created successfully'; } } ?>

Результат выполнения кода:

"User created successfully"

Пример

Трейт RefreshDatabase также работает с тестами, использующими фабрики. Каждый тест будет начинаться с пустой базы данных:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; use App\Models\User; class UserTest extends TestCase { use RefreshDatabase; public function test_database_is_empty_before_each_test() { $count_before = User::count(); echo 'Count before: ' . $count_before; User::factory()->count(5)->create(); $count_after = User::count(); echo 'Count after: ' . $count_after; } } ?>

Результат выполнения кода:

"Count before: 0" "Count after: 5"

Пример

При использовании транзакций трейт RefreshDatabase может работать в режиме транзакций для ускорения тестов. По умолчанию используется миграция, но можно настроить использование транзакций:

<?php namespace Tests\Feature; use Tests\TestCase; use Illuminate\Foundation\Testing\RefreshDatabase; use App\Models\User; class UserTest extends TestCase { use RefreshDatabase; protected function setUp(): void { parent::setUp(); // Не использовать транзакции, только миграции $this->refreshDatabase(); } public function test_using_migrations() { $res = User::create([ 'name' => 'Jane Doe', 'email' => 'jane@example.com', 'password' => bcrypt('password') ]); $this->assertDatabaseHas('users', [ 'email' => 'jane@example.com' ]); } } ?>

Смотрите также

  • класс TestCase,
    который является базовым классом для всех тестов
  • метод setUp,
    который вызывается перед каждым тестом
  • метод tearDown,
    который вызывается после каждого теста
  • метод seed,
    который заполняет базу данных тестовыми данными
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить