2017-03-27 9 views
1

Ich habe die folgende Beziehung in User Modell und UserLevel Modell.Zugriff auf eloquente Beziehung im Laravel-Test nicht möglich

Benutzer:

public function user_level() 
{ 
    return $this->belongsTo('App\UserLevel'); 
} 

Userlevel:

public function users() 
{ 
    return $this->hasMany('App\User'); 
} 

Das perfekt in Tinker funktioniert wie folgt:

enter image description here

Aber ich kann nicht die Beziehung zugreifen scheinen im Laravel PHPUnit Test. Folgende die and dump kehrt 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); 
    } 
} 

Wenn ich die $super_admin_userdd, zeigt es richtig den erstellten Benutzer. Was mache ich falsch? Wie kann ich auf den user_level im Test zugreifen?

Antwort

0

Ich kann nur annehmen, dass in Ihrem Modell Fabrik Sie auch verwandtes Modell zu erstellen, so dass, wenn in Ihrem Test, den Sie verwenden:

$super_admin_user = factory(User::class)->create([ 
     'username' => 'Test User 6', 
     'user_level_id' => 7, 
    ]); 

es da nicht. Es gibt keine Userlevel mit id 7. So sollten Sie entweder ein zum Beispiel in Ihren Test erstellen:

$user_level = factory(UserLevel::class)->create(); 
$super_admin_user = factory(User::class)->create([ 
     'username' => 'Test User 6', 
     'user_level_id' => $user_level->id, 
    ]); 

oder entfernen user_level_id von Test vollständig:

$super_admin_user = factory(User::class)->create([ 
    'username' => 'Test User 6', 
]); 

(das ist, was Sie in Kesselflicker verwenden)

Referenz: https://laravel.com/docs/5.4/database-testing#writing-factories - Abschnitt Relations & Attribut Closures

Verwandte Themen