mercredi 19 février 2020

Laravel test not updating database

I'm trying to test a database model with Laravel 6.

I try to assign an email to a user. When I printf($email), the user_id is correct, but on $this->assertDatabaseHas('emails', ['user_id' => $user->id]); the assertion fails.

The printf($email) output:

{
       "address":"eliane49@example.com",
       "isPrimary":true,
       "user_id":1,
       "verifyingtoken":"SJ9dgZXJyD",
       "verified_at":null,
       "updated_at":"2020-02-19 14:04:31",
       "created_at":"2020-02-19 14:04:31",
       "id":1
}

the assert found output:

{
        "address": "eliane49@example.com",
        "verifyingtoken": "SJ9dgZXJyD",
        "user_id": null,
        "isPrimary": "1",
        "verified_at": null,
        "created_at": "2020-02-19 14:04:31",
        "updated_at": "2020-02-19 14:04:31"
    }

Here is the test:

/** @test */
    public function an_email_can_belong_to_a_user(){
        $user = factory(App\User::class)->create();
        $email = factory(App\Email::class)->create();

        $user->emails()->save($email);
        printf($email);

        $this->assertDatabaseHas('emails', ['user_id' => $user->id]);
    }

The email-migration:

    public function up()
    {
        Schema::create('emails', function (Blueprint $table) {
            $table->string('address')->unique();
            $table->string('verifyingtoken');
            $table->integer('user_id')->unsigned()->nullable();
            $table->boolean('isPrimary');
            $table->timestamp('verified_at')->nullable();

            $table->primary(['address', 'user_id']);
            $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
            $table->timestamps();
        });
    }

Aucun commentaire:

Enregistrer un commentaire