#laravel #phpunit
#laravel #phpunit
Вопрос:
Я пытаюсь запустить модульный тест, который вводит данные в базу данных перед тестовым запуском. Я определил метод установки, который выполняется для каждого тестового примера, чего я не хочу. Метод установки выполняется нормально, без проблем. Я хочу, чтобы данные были введены в базу данных один раз, а затем использовались всеми тестовыми примерами. Поэтому я настраиваю статическую функцию setUpBeforeClass.
public static function setUpBeforeClass() : void {
parent::setUpBeforeClass();
static::$journalOption = new JournalOption;
$this->user = factory(User::class)->create();
}
При вызове пользовательского заводского класса я получаю следующую ошибку:
Исключение InvalidArgumentException: не удается найти завод с именем [по умолчанию] [Приложение Пользователь]
The UserFactory.php файл существует в database/factories/UserFactory.php
<?php
use IlluminateSupportStr;
use FakerGenerator as Faker;
$factory->define(AppUser::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),
];
});
Комментарии:
1. Есть ли у вас
use AppUser;
в вашем тестовом файле вышеpublic static function setUpBeforeClass()
?2. Да, у меня это указано выше объявления класса Delena
Ответ №1:
factory
Функция не работает должным образом в вашей setUpBeforeClass
функции, потому что приложение еще не загружено при запуске этой функции. Вы могли бы загрузить приложение и выполнить миграции в вашей setUpBeforeClass
функции, но я бы не рекомендовал этого.
Как правило, вы должны создавать необходимые данные для каждого теста отдельно на случай, если другой тест изменяет или удаляет данные или имеет другие неожиданные побочные эффекты. Поэтому было бы лучше, если бы вы сохранили завод в своей setup()
функции. Вы могли бы использовать базу данных SQLite в памяти для своих тестов, если вы беспокоитесь о загрязнении вашей базы данных.
Комментарии:
1. Может быть, само собой разумеется, но я часто забываю добавить,
parent::setup()
если мы переопределяемsetup()
метод.