@ildar-meyker

Вопрос про трейт RefreshDatabase, setUp метод тест-класса и сиды. Как оно работает?

Видимо, не до конца понял порядок запуска тестов.

У меня есть env.testing, которая ссылается на тестовую бд. Созданы фабрики для моделей, DatabaseSeeder.php использует эти фабрики и успешно создает данные. То есть при запуске php artisan db:seed --env=testing все ок.

TestCase.php выглядит так. Используется трейт RefreshDatabase, определено свойство protected $seed = true; и переопределен метод setUp().

Я полагал, что это работает следующим образом. При запуске каждого теста (класса) сначала вызывается метод setUp() этого класса, который чистит таблицы, запускает миграции и заполняет тестовую таблицу сидами, используя DatabaseSeeder.php. Затем в моем случае создаются еще 2 пользователя.

И вот после запуска всех тестов я смотрю в тестовую бд и не вижу этих 2 пользователей. Собственно, почему?
<?php

namespace Tests;

use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use App\Models\User;

abstract class TestCase extends BaseTestCase
{
    use CreatesApplication;
    use RefreshDatabase;

    protected $seed = true;
    protected $admin;
    protected $user;
    protected $unverifiedUser;

    protected function setUp(): void
    {
        parent::setUp();

        $this->admin = User::find(1);

        $this->user = User::factory()->create();

        $this->unverifiedUser = User::factory()->create([
            'email_verified_at' => null
        ]);
    }
}
  • Вопрос задан
  • 550 просмотров
Пригласить эксперта
Ответы на вопрос 1
@Nc_Soft
Написано же в документации что RefreshDatabase чистит базу после каждого теста
https://laravel.com/docs/8.x/database-testing#rese...
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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