我在User
模型和UserLevel
模型中有以下关系。
用户:
public function user_level()
{
return $this->belongsTo('App\UserLevel');
}
的UserLevel:
public function users()
{
return $this->hasMany('App\User');
}
这在Tinker中非常有效,如下所示:
但我似乎无法访问Laravel PHPUnit测试中的关系。以下die and dump
返回null
:
class AddUserTest extends TestCase
{
use DatabaseMigrations;
/** @test */
public function super_admin_can_view_add_user_form()
{
$super_admin_user = factory(User::class)->create([
'username' => 'Test User 6',
'user_level_id' => 7,
]);
dd($super_admin_user->user_level);
}
}
如果我dd
$super_admin_user
,则会正确显示已创建的用户。我究竟做错了什么?如何在测试中访问user_level?
答案 0 :(得分:0)
我只能假设您在模型工厂中创建了相关模型,因此如果您在测试中使用:
$super_admin_user = factory(User::class)->create([
'username' => 'Test User 6',
'user_level_id' => 7,
]);
它不起作用,因为。没有标识为7的UserLevel。因此,您应该在测试中创建一个,例如:
$user_level = factory(UserLevel::class)->create();
$super_admin_user = factory(User::class)->create([
'username' => 'Test User 6',
'user_level_id' => $user_level->id,
]);
或完全从测试中删除user_level_id
:
$super_admin_user = factory(User::class)->create([
'username' => 'Test User 6',
]);
(这是你在修补匠中使用的)
参考:https://laravel.com/docs/5.4/database-testing#writing-factories - 关系&属性闭包