我正在尝试使用模型工厂在数据提供程序中创建模型。如果我在设置方法中或直接在测试中使用工厂,则可以使用,但是如果我尝试在数据提供程序中使用它,则会出现错误:
1)警告
为MyClassTest :: testSomeMethod指定的数据提供者无效。
无法找到名称为[default] [App \ Model \ User]的工厂。
工厂定义:
/** @var \Illuminate\Database\Eloquent\Factory $factory */
$factory->define(\App\Model\User::class, function (Faker\Generator $faker) {
static $password;
return [
'id' => $faker->unique()->numberBetween(1, 10000),
'email_address' => $faker->unique()->safeEmail,
'remember_token' => str_random(10),
'password' => $password ?: $password = bcrypt('secret'),
];
});
$factory->state(\App\Model\User::class, 'guest', function ($faker) {
return [
'role_id' => 9999,
];
});
Run Code Online (Sandbox Code Playgroud)
我给工厂打电话:
factory(\App\Model\User::class)->states('guest')->make();
Run Code Online (Sandbox Code Playgroud)
是Laravel的错误,还是我在这里错过了一些东西?
编辑:
经过一些调试之后,我发现工厂定义没有在数据提供者调用之前加载,而是在调用setUp()方法时(即在数据提供者调用之后发生)调用了(即定义了)工厂定义,因此找不到工厂在数据提供者中。
因此在我看来,不可能在数据提供程序中使用工厂(或测试类中的任何静态方法)。否则我应该做一些事情来在我的数据提供者方法中定义工厂!