PHPUnit на Laravel setUpBeforeClass не может найти фабричный класс - PullRequest
0 голосов
/ 15 марта 2019

Я пытаюсь запустить модульный тест, который вводит данные в базу данных до запуска теста.Я определил метод настройки, который запускается для каждого тестового примера, который я не хочу.Метод установки выполняется нормально, без проблем.Я хочу, чтобы данные вводились в базу данных один раз, а затем использовались во всех тестах.Поэтому я устанавливаю статическую функцию setUpBeforeClass.

public static function setUpBeforeClass() : void {
    parent::setUpBeforeClass();
    static::$journalOption = new JournalOption;
    $this->user = factory(User::class)->create();


}

Когда вызывается пользовательский класс фабрики, я получаю следующую ошибку:

InvalidArgumentException: Невозможно найти фабрику с именем [default] [App \Пользователь]

Файл 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),
    ];
});

1 Ответ

0 голосов
/ 15 марта 2019

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

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

...