Фабричный помощник не работает в методе установки PHPUnit - PullRequest
0 голосов
/ 09 ноября 2018

Написание некоторых модульных тестов, и я хочу создать объект до того, как тесты в классе будут выполнены.Поэтому я настроил метод setUpBeforeClass():

<?php
namespace Tests\Unit;
use Tests\TestCase;
use App\Location;
class UserTests extends TestCase {
    const FAKEID = 9999999;
    public static function setUpBeforeClass() : void {
        parent::setUpBeforeClass();
        factory(Location::class)->make(["id" => self::FAKEID])->save();
    }
}

Но когда я пытаюсь запустить это, я получаю эту ошибку:

InvalidArgumentException: Unable to locate factory with name [default] [App\Location].

Но фабричный класс настроен правильно.На самом деле, если я перенесу эту строку на одну из моих тестовых функций, она будет работать отлично.

public function testCreateUser() {
    factory(Location::class)->make(["id" => self::FAKEID])->save();
    // do other stuff...
}

Единственное, что отличается от setUpBeforeClass(), - это статический метод,но я не знаю, почему это помешало бы работе фабричного класса.

1 Ответ

0 голосов
/ 09 ноября 2018

Laravel много настраивает в методе setUp() в классе TestCase. До этого вызывался метод setUpBeforeClass(), поэтому ваша фабрика еще не загружена.

Метод TestCase класса Laravel setup ( см. Класс ):

/**
 * Setup the test environment.
 *
 * @return void
 */
protected function setUp()
{
    if (! $this->app) {
        $this->refreshApplication();
    }

    $this->setUpTraits();

    foreach ($this->afterApplicationCreatedCallbacks as $callback) {
        call_user_func($callback);
    }

    Facade::clearResolvedInstances();
    Model::setEventDispatcher($this->app['events']);

    $this->setUpHasRun = true;
}

Измените код для использования setUp вместо:

protected static function setUp() : void 
{
    parent::setUp();

    factory( Location::class )->make( ["id" => self::FAKEID] )->save();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...