PHPUnit в Laravel setUpBeforeClass не может найти заводской класс

Я пытаюсь запустить модульный тест, который вводит данные в базу данных перед запуском теста. Я определил метод настройки, который запускается для каждого тестового примера, чего я не хочу. Метод установки выполняется нормально, без проблем. Я хочу, чтобы данные вводились в базу данных один раз, а затем использовались всеми тестовыми примерами. Поэтому я устанавливаю статическую функцию 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),
    ];
});

У вас есть use App\User; в тестовом файле выше public static function setUpBeforeClass()?

D Malan 15.03.2019 12:34

Да, я указал это выше объявления класса Delena

Danny Younes 15.03.2019 13:04
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
2
2
1 398
1

Ответы 1

Функция factory не работает должным образом в вашей функции setUpBeforeClass, потому что приложение еще не загружено, когда эта функция запущена. Вы можете загрузить приложение и запустить миграцию в своей функции setUpBeforeClass, но я бы не рекомендовал этого делать.

Как правило, данные, необходимые для каждого теста, следует создавать отдельно на случай, если другой тест изменяет или удаляет данные или имеет другие непредвиденные побочные эффекты. Так что было бы лучше, если бы вы сохранили фабрику в своей функции setup(). Вы можете использовать базу данных SQLite в памяти для своих тестов, если вы беспокоитесь о загрязнении вашей базы данных.

Само собой разумеется, но я часто забываю добавить parent::setup(), если мы переопределяем метод setup().

rosscooper 11.06.2020 15:22

Другие вопросы по теме