Вызов неопределенного метода newCollection при использовании фабрик с Laravel - Doctrine - PullRequest
1 голос
/ 04 февраля 2020

Я хотел бы использовать Фабрики моделей , но я получаю эту ошибку:

1) Tests\Factory\UserFactoryTest::testUserCount
Error: Call to undefined method App\Entities\User::newCollection()

C:\Projects\factory_test\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:228
C:\Projects\factory_test\vendor\laravel\framework\src\Illuminate\Database\Eloquent\FactoryBuilder.php:178
C:\Projects\factory_test\tests\Factory\UserFactoryTest.php:21

Заводской код был скопирован из примера Laravel - Doctrine проект :

$factory->define(App\Entities\User::class, function (Faker\Generator $faker) {
    return [
        'name' => $faker->title,
    ];
});

Что я не так делаю? Нужны ли дополнительные конфигурации перед использованием заводов? Doctrine отлично работает, у меня проблема только с factory()

Тестовый класс выглядит так:

class UserFactoryTest extends TestCase {

    private $users = array();

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

        $this->users = factory(User::class, 3)->create();
    }

    // ...

}

1 Ответ

3 голосов
/ 14 февраля 2020

Ваша функция setUp() использует стандартный помощник Laravel factory() для генерации тестовых данных.

Измените это на:

protected function setUp(): void
{
    parent::setUp();
    $this->users = entity(User::class, 3)->create();
    //             ^^^^^^
}

Laravel Doctrine entity() вспомогательный метод использует закулисный базовый класс, отличный от стандартного Laravel factory() вспомогательного метода.

// Laravel Doctrine
$factory = app('LaravelDoctrine\ORM\Testing\Factory');

Сравните с factory() вспомогательный метод в рамках Laravel:

// Laravel framework
$factory = app(EloquentFactory::class);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...