Tests Laravel : exécuter vos migrations de base de données une seule fois
Dans les tests sur Laravel, le trait RefreshDatabase
permet de rafraîchir le schéma de la base de données automatiquement. Le problème, c’est que la base sera réinitialisée pour chaque test, ce qui peut prendre un certain temps.
Pour régler ce problème, nous allons créer notre propre trait, permettant d’initialiser une seule fois la base de données pour tous nos tests.Dans le répertoire tests, nous créons le fichier tests/Traits/MigrateFreshSeedOnce.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<?php namespace Tests\Traits; use Illuminate\Support\Facades\Artisan; trait MigrateFreshSeedOnce{ protected static $setUpHasRunOnce = false; protected function setUp(): void { parent::setUp(); if (!static::$setUpHasRunOnce) { Artisan::call('migrate:fresh'); Artisan::call('db:seed', [ '--class' => 'DatabaseSeeder' ]); static::$setUpHasRunOnce = true; } } } |
Ensuite, sur le parent commun à tous les tests tests/TestCase.php
, nous pouvons appliquer notre trait.
1 2 3 4 5 6 7 8 9 10 11 |
<?php namespace Tests; use Tests\Traits\MigrateFreshSeedOnce; use Illuminate\Foundation\Testing\TestCase as BaseTestCase; abstract class TestCase extends BaseTestCase { use CreatesApplication, MigrateFreshSeedOnce; } |