猫でもわかるWeb開発・プログラミング

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

Laravel の assertDatabaseHas で JSON のカラムを比較する

assertDatabaseHas について

Laravel には assertDatabaseHas という、データベースにデータが存在するかどうかチェックするアサーションがあります。

詳細は Laravel のドキュメントの「データベーステスト」を見てください

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

この時に、JSON カラムを比較したい場合は、 castAsJson メソッドを利用する必要があるので注意です。

OK

<?php

$this->assertDatabaseHas('users', [
    'id' => 1,
    'tag' => $this->castAsJson(['game', 'anime']),
]);

NG

<?php

$this->assertDatabaseHas('users', [
    'id' => 1,
    'tag' => ['game', 'anime'],
]);
<?php

$this->assertDatabaseHas('users', [
    'id' => 1,
    'tag' => json_encode(['game', 'anime']),
]);

テストが落ちた時のメッセージからはまず気付けないので注意が必要です。