diff --git a/src/Illuminate/Support/Facades/ParallelTesting.php b/src/Illuminate/Support/Facades/ParallelTesting.php index d91558c1cb80..4a2289013966 100644 --- a/src/Illuminate/Support/Facades/ParallelTesting.php +++ b/src/Illuminate/Support/Facades/ParallelTesting.php @@ -7,11 +7,13 @@ * @method static void resolveTokenUsing(\Closure|null $resolver) * @method static void setUpProcess(callable $callback) * @method static void setUpTestCase(callable $callback) + * @method static void setUpTestDatabaseBeforeMigrating(callable $callback) * @method static void setUpTestDatabase(callable $callback) * @method static void tearDownProcess(callable $callback) * @method static void tearDownTestCase(callable $callback) * @method static void callSetUpProcessCallbacks() * @method static void callSetUpTestCaseCallbacks(\Illuminate\Foundation\Testing\TestCase $testCase) + * @method static void callSetUpTestDatabaseBeforeMigratingCallbacks(string $database) * @method static void callSetUpTestDatabaseCallbacks(string $database) * @method static void callTearDownProcessCallbacks() * @method static void callTearDownTestCaseCallbacks(\Illuminate\Foundation\Testing\TestCase $testCase) diff --git a/src/Illuminate/Testing/Concerns/TestDatabases.php b/src/Illuminate/Testing/Concerns/TestDatabases.php index bf1b910e3b7d..a273ed1299f4 100644 --- a/src/Illuminate/Testing/Concerns/TestDatabases.php +++ b/src/Illuminate/Testing/Concerns/TestDatabases.php @@ -59,6 +59,10 @@ protected function bootTestDatabase() $this->switchToDatabase($testDatabase); + if ($created) { + ParallelTesting::callSetUpTestDatabaseBeforeMigratingCallbacks($testDatabase); + } + if (isset($uses[Testing\DatabaseTransactions::class])) { $this->ensureSchemaIsUpToDate(); } diff --git a/src/Illuminate/Testing/ParallelTesting.php b/src/Illuminate/Testing/ParallelTesting.php index 736aea91a880..2efee59eff41 100644 --- a/src/Illuminate/Testing/ParallelTesting.php +++ b/src/Illuminate/Testing/ParallelTesting.php @@ -42,6 +42,13 @@ class ParallelTesting */ protected $setUpTestCaseCallbacks = []; + /** + * All of the registered "setUp" test database callbacks prior to the migrations. + * + * @var array + */ + protected $setUpTestDatabaseBeforeMigratingCallbacks = []; + /** * All of the registered "setUp" test database callbacks. * @@ -117,6 +124,17 @@ public function setUpTestCase($callback) $this->setUpTestCaseCallbacks[] = $callback; } + /** + * Register a "setUp" test database callback that runs prior to the migrations. + * + * @param callable $callback + * @return void + */ + public function setUpTestDatabaseBeforeMigrating($callback) + { + $this->setUpTestDatabaseBeforeMigratingCallbacks[] = $callback; + } + /** * Register a "setUp" test database callback. * @@ -184,6 +202,24 @@ public function callSetUpTestCaseCallbacks($testCase) }); } + /** + * Call all of the "setUp" test database callbacks that run prior to migrations. + * + * @param string $database + * @return void + */ + public function callSetUpTestDatabaseBeforeMigratingCallbacks($database) + { + $this->whenRunningInParallel(function () use ($database) { + foreach ($this->setUpTestDatabaseBeforeMigratingCallbacks as $callback) { + $this->container->call($callback, [ + 'database' => $database, + 'token' => $this->token(), + ]); + } + }); + } + /** * Call all of the "setUp" test database callbacks. * diff --git a/tests/Testing/ParallelTestingTest.php b/tests/Testing/ParallelTestingTest.php index f34b25da6a6d..5845a7b8c9ca 100644 --- a/tests/Testing/ParallelTestingTest.php +++ b/tests/Testing/ParallelTestingTest.php @@ -91,6 +91,7 @@ public static function callbacks() ['setUpProcess'], ['setUpTestCase'], ['setUpTestDatabase'], + ['setUpTestDatabaseBeforeMigrating'], ['tearDownTestCase'], ['tearDownProcess'], ];