2016-05-31 8 views
1

Ich habe ein reguläres User Modell. Das System funktioniert gut, wenn ich es benutze. Aber jetzt versuche ich Komponententests in der mit Laravel integrierten PHPUnit zu erstellen.Laravel Model Factories ID nicht gesetzt

Ich habe eine Fabrik, die einen Benutzer erstellt:

$factory->define(App\User::class, function (Faker\Generator $faker) { 
    return [ 
     'id' => $faker->randomNumber(9), 
     'email' => $faker->safeEmail, 
     'first_name' => $faker->firstNameMale, 
     'last_name' => $faker->lastName, 
     'password' => bcrypt(str_random(10)), 
     'remember_token' => str_random(10), 
    ]; 
}); 

ich den Benutzer geändert integer ID als Primärschlüssel zu haben, aber es ist nicht so Autoinkrement definiert. Also die Fabrik erstellen Zufallszahl für die ID.

Auch habe ich den einfachen Test erstellt:

public function test_id_is_visible() { 
    $user = factory(App\User::class)->create(); 

    $this->actingAs($user); 
    $this->visit('/userprofile'); 
    $this->see($user->id); 
} 

Das Test nicht immer, aber es scheint in Ordnung zu sein, wenn ich auf der Seite manuell navigieren.

Ich habe festgestellt, dass im Test die $user->id immer 0 ist. Auch kann es nicht 0 in der Fabrik sein. Ich überprüfte und Laravel füge den Benutzer korrekt in die Datenbank ein und es hat korrekte ID, aber im Code bekomme ich immer 0.

Was kann ich tun, um den korrekten Wert der ID zu erhalten?

EDIT Jetzt sehe ich, dass, wenn ich ändert $user = factory(App\User::class)->create(); zu $user = factory(App\User::class)->make(); die Benutzerinstanz eine korrekte ID hält. Aber warum create löscht die ID?

Antwort

1

Das Problem ist aufgetreten, weil die ID nicht als Auto-Inkrement definiert ist.
Weitere Informationen, die Sie gefunden können:
https://stackoverflow.com/a/31350800/1725836

Auch die Frage ist für Laravel 4 für Laravel 5.2 noch relevant ist.