#php #laravel #testing #in-memory-database
#php #laravel #тестирование #база данных в памяти
Вопрос:
Я пишу функциональные тесты с базой данных в памяти
Недавно я установил плагин, разрешение laravel.
раньше в моей таблице было простое profile_id
поле users
. Итак, мне просто пришлось использовать refreshDatabase
trait create пользователя и тестировать его для каждого пользовательского теста. Это было довольно быстро.
Теперь я перешел на разрешение laravel, я определил более 100 разрешений. Я должен перенести DB и заполнить их для каждого теста. Теперь каждый тест занимает до 3 секунд, и у меня 112 тестов, и это только начало. Это слишком медленно.
Я попытался использовать метод MigrateAndSeedOnce внутри моего setUp()
метода:
trait MigrateFreshSeedOnce
{
/**
* If true, setup has run at least once.
* @var boolean
*/
protected static $setUpHasRunOnce = false;
/**
* After the first run of setUp "migrate:fresh --seed"
* @return void
*/
public function setUp() :void
{
parent::setUp();
if (!static::$setUpHasRunOnce) {
Artisan::call('migrate:fresh');
$this->seed('SourceTableSeeder');
$this->seed('RoleTableSeeder');
$this->seed('PermissionTableSeeder');
$this->seed('RepartitionTableSeeder');
$this->company = Company::factory()->create();
$this->operation = Operation::factory()->create(['company_id' => 1]);
$this->user = User::factory()->create(
[
'email' => 'exapmle@company.com',
'company_id' => 1,
'operation_id' => 1,
]);
$this->user->assignRole(User::SUPER_ADMIN);
static::$setUpHasRunOnce = true;
}
$this->actingAs($this->user);
}
Это отлично работает для первого теста, но для второго теста $this->user
равно null.
Возможно ли выполнить это с помощью базы данных в памяти (это было бы намного быстрее), или я должен переключиться на Sqlite DB (медленнее), или есть какой-либо другой лучший вариант?