Фабричный помощник не работает в методе установки PHPUnit

Написание некоторых модульных тестов, и я хочу создать объект до того, как тесты в классе будут выполнены. Поэтому я настроил 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() в том, что это статический метод, но я не знаю, почему это помешало бы работе фабричного класса.

0

Решение

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

Ларавелла TestCase учебный класс 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();
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector