我想定义几个不同的用户模型变体进行测试,使用Laravel的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();
}
];
});
然后我创建了一个用户模型(User model):
$user = factory(User::class)->states('admin')->make();
但是PHPUnit似乎会在测试结束后退出而不发出任何抱怨。在PHP日志中,我看到:
Call to undefined method Illuminate\Database\Eloquent\Factory::state()
在Laravel文档中,关于state()方法的说明很少,我已经搜索和试验了几个小时,但仍未取得进展。另外,
groups
属性指的是多对多(Many)关系。不过,即便是创建简单模型,也会抛出该异常。
composer update
之后,我升级到了Laravel Framework v5.3.18,现在ModelFactory的状态正常工作。 - Aaron Dressler