📝

Laravelで論理削除をテストする

2023/12/03に公開

はじめに

Laravelで論理削除を検証する機会がありました。
そのメモを残します。

方法

assertSoftDeletedメソッドを使います。

    public function test_論理削除されること()
    {
        $post = Post::find(1);

        $response = $this->json("DELETE", "/post/1");

        $response->assertStatus(Response::HTTP_OK);

        $this->assertSoftDeleted($post);
    }

論理削除されていない場合は、assertDatabaseHasで検証しました。

    public function test_他人の投稿は削除できない()
    {
        $response = $this->json("DELETE", "/post/2");

        $response->assertStatus(Response::HTTP_FORBIDDEN);

        $this->assertDatabaseHas("posts", [
            'id' => 2,
            'deleted_at' => null, // 論理削除されていないことを確認
        ]);
    }

参考

https://readouble.com/laravel/10.x/ja/database-testing.html

Discussion