[英]Laravel Model Factories ID not set
我有一個普通的User
模型。 當我使用它時,系統工作正常。 但是現在我正在嘗試在與 Laravel 集成的 PHPUnit 中創建單元測試。
我有一個創建用戶的工廠:
$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),
];
});
我將用戶更改為以整數 ID 作為主鍵,但它沒有定義為自動增量。 因此工廠為 ID 創建隨機數。
我還創建了簡單的測試:
public function test_id_is_visible() {
$user = factory(App\User::class)->create();
$this->actingAs($user);
$this->visit('/userprofile');
$this->see($user->id);
}
該測試總是失敗,但當我手動導航到頁面時似乎沒問題。
我注意到在測試中$user->id
始終為 0。即使它在工廠中也不能為 0。 我檢查並 Laravel 將用戶正確插入到數據庫中並且它具有正確的ID,但在代碼中我總是得到 0。
我該怎么做才能獲得正確的 ID 值?
編輯現在我看到如果我改變$user = factory(App\\User::class)->create();
到$user = factory(App\\User::class)->make();
用戶實例擁有正確的 ID。 但是為什么創建清除ID?
Laravel 5.8+ 更新確保設置
public $incrementing = false;
在你的模型上。
出現問題是因為 ID 未定義為自動遞增。
您可以在以下位置找到更多信息:
https://stackoverflow.com/a/31350800/1725836
即使問題是針對 Laravel 4,它仍然與 Laravel 5.2 相關。
您可以像這樣編寫測試:
$users = factory(User::class, 5)->make();
$users->each(function ($item, $key) {
$item->id = ++$key;
});
現在每個用戶都有一個id
,無需將模型持久化到數據庫(使用create()
而不是make()
)。
public function test_id_is_visible() {
$user = factory(App\User::class)->make();
$user->id = 7;
$this->actingAs($user);
$this->visit('/userprofile');
$this->see($user->id);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.