我试图定义一个用户模式测试的几个不同的版本,使用Laravels ModelFactory作为记录在这里
$factory->define(App\User::class, function(\Faker\Generator $faker) {
return [
'name' => $faker->name,
'email' => $faker->unique()->safeEmail,
'remember_token' => str_random(10),
'phone' => $faker->phoneNumber,
];
});
$factory->state(App\User::class, 'admin', function (Faker\Generator $faker) {
return [
'groups' => function(App\User $u) {
return App\Models\Group::where('level', '<=', 5)->get()->toArray();
}
];
});
Run Code Online (Sandbox Code Playgroud)
然后我创建一个User模型:
$user = factory(User::class)->states('admin')->make();
Run Code Online (Sandbox Code Playgroud)
但phpunit似乎没有抱怨就退出了测试.在PHP日志中,我看到:
Call to undefined method Illuminate\Database\Eloquent\Factory::state()
Run Code Online (Sandbox Code Playgroud)
Laravel文档中没有关于state()方法的文档,我已经搜索和实验了几个小时而没有任何进展来展示它.
作为旁注:该groups属性指的是许多关系.但是,无论我创建哪种模型,甚至是简单模型,都会抛出此异常.
在深入研究 Illuminate\Database\Eloquent\Factory 和 FactoryBuilder 类后,我发现与 github 上最新的 Laravel 分支相比,state() 和 states() 方法都丢失了。运行 Composer update 后,它将我更新到 Laravel Framework v5.3.18,现在 ModelFactory 状态按预期工作。