Я пытаюсь запустить модульный тест, который вводит данные в базу данных перед запуском теста. Я определил метод настройки, который запускается для каждого тестового примера, чего я не хочу. Метод установки выполняется нормально, без проблем. Я хочу, чтобы данные вводились в базу данных один раз, а затем использовались всеми тестовыми примерами. Поэтому я устанавливаю статическую функцию setUpBeforeClass.
public static function setUpBeforeClass() : void {
parent::setUpBeforeClass();
static::$journalOption = new JournalOption;
$this->user = factory(User::class)->create();
}
Когда вызывается пользовательский класс factory, я получаю следующую ошибку:
InvalidArgumentException: невозможно найти фабрику с именем [по умолчанию] [App\User]
Файл UserFactory.php существует в базе данных/фабриках/UserFactory.php.
<?php
use Illuminate\Support\Str;
use Faker\Generator as Faker;
$factory->define(App\User::class, function (Faker $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'email_verified_at' => now(),
'password' => '$2y$10$TKh8H1.PfQx37YgCzwiKb.KjNyWgaHb9cbcoQgdIVFlYg7B77UdFm', // secret
'remember_token' => Str::random(10),
];
});
Да, я указал это выше объявления класса Delena






Функция factory не работает должным образом в вашей функции setUpBeforeClass, потому что приложение еще не загружено, когда эта функция запущена. Вы можете загрузить приложение и запустить миграцию в своей функции setUpBeforeClass, но я бы не рекомендовал этого делать.
Как правило, данные, необходимые для каждого теста, следует создавать отдельно на случай, если другой тест изменяет или удаляет данные или имеет другие непредвиденные побочные эффекты. Так что было бы лучше, если бы вы сохранили фабрику в своей функции setup(). Вы можете использовать базу данных SQLite в памяти для своих тестов, если вы беспокоитесь о загрязнении вашей базы данных.
Само собой разумеется, но я часто забываю добавить parent::setup(), если мы переопределяем метод setup().
У вас есть
use App\User;в тестовом файле вышеpublic static function setUpBeforeClass()?