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?