How to test that an Eloquent model actually exists original

by Freek Van der Herten – 1 minute read

In your tests, you might have used assertDatabaseHas to make sure that a model actual is persisted.

it('will not delete a user', function() {
    $user = User::find(1);

    // perform some logic of which you want 
    // to verify that it doesn't delete your user

    $this->assertDatabaseHas('users', [
        'id' => 1,
    ]);
});

In recent Laravel versions you can replace this with assertModelExists, which performs that database check under the hood.

it('will not delete a user', function() {
    $user = User::find(1);

    // perform some logic of which you want 
    // to verify that it doesn't delete your user

    $this->assertModelExists($user);
});

There's also a assertModelMissing that you could you instead of the more verbose assertDatabaseMissing.

I hope this little tip, will improve the readability of your tests.

Join 9,500+ smart developers

Get my monthly newsletter with what I learn from running Spatie, building Oh Dear, and maintaining 300+ open source packages. Practical takes on Laravel, PHP, and AI that you can actually use.

No spam. Unsubscribe anytime. You can also follow me on X.

Found something interesting to share? Submit a link to the community section.