簡體   English   中英

Laravel 模型工廠 ID 未設置

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM