Я хотел обновить свою тестовую базу данных один раз для каждого класса, а не для каждого теста, используя метод setUpBeforeClass
. Поскольку он статичен, я не могу вызвать $this->artisan()
, поэтому я попытался использовать Artisan::call()
с фасадами.
Проблема в том, что фасады здесь не работают. Я получаю сообщение об ошибке A facade root has not been set.
, хотя раскомментировал $app->withFacades();
из bootstrap/app.php
.
Как я могу вызвать ремесленную команду внутри setUpBeforeClass
?
Вот мой тестовый класс:
<?php
use Illuminate\Support\Facades\Artisan;
class ExampleTest extends TestCase
{
public static function setUpBeforeClass(): void
{
parent::setUpBeforeClass();
Artisan::call('migrate:fresh');
Artisan::call('db:seed --no-interaction');
}
public function testOne()
{
$this->assertTrue(true);
}
}
setUpBeforeClass
. Интересный вопрос, как вы пришли к другому выводу? - person hakre   schedule 14.06.2021setUpBeforeClass
это невозможно - только что увидел этот ответ, и это имеет смысл - stackoverflow.com/a/46453228/6453726. Не знаю, как этого можно добиться, но я считаю, что это было бы очень полезно. Я разместил это какIdea
в репозитории Laravel - github.com/laravel/framework/discussions/37980 Спасибо. - person guizo   schedule 12.07.2021setUpBeforeClass
). - person hakre   schedule 12.07.2021