Laravelでデータベースを使ったテストを行う方法を完全解説!RefreshDatabaseで安心テスト入門
生徒
「Laravelでデータを保存する処理を作ったんですが、ちゃんとデータベースに入っているか不安です…」
先生
「それなら、データベースを使ったテストを行うと確認できますよ。」
生徒
「テストでデータベースを使うと、データが増えてしまいませんか?」
先生
「Laravelには、テストのたびにデータをきれいにしてくれる仕組みがあります。それがRefreshDatabaseです。」
1. Laravelのデータベーステストとは?
Laravelのデータベーステストとは、実際にデータベースへ保存や取得を行いながら確認するテストのことです。画面表示だけでなく、裏側で正しくデータが扱われているかをチェックできます。
これは、家計簿にお金を書いたあと、本当に合計金額が合っているかを確認する作業に似ています。見た目だけでなく、中身も正しいかを確認するのがポイントです。
2. RefreshDatabaseとは何か
RefreshDatabaseは、Laravelのテスト用機能の一つで、テストを実行するたびにデータベースを初期状態に戻してくれます。
テストのたびに机の上を片付けてから作業を始めるようなイメージです。前回のデータが残らないため、毎回同じ条件でテストできます。
3. RefreshDatabaseの基本的な使い方
RefreshDatabaseは、テストクラスで読み込むだけで使えます。
use Illuminate\Foundation\Testing\RefreshDatabase;
class UserTest extends TestCase
{
use RefreshDatabase;
}
この一行を追加するだけで、テスト前後にデータベースが自動でリセットされます。
4. データを保存するテストの例
次に、データが正しく保存されるかをテストしてみます。ここでは、ユーザー情報を保存する例です。
public function test_user_can_be_created()
{
$this->post('/users', [
'name' => '山田太郎',
'email' => 'test@example.com'
]);
$this->assertDatabaseHas('users', [
'email' => 'test@example.com'
]);
}
assertDatabaseHasは、「指定したデータがデータベースに存在するか」を確認する命令です。名簿に名前が載っているかを確認する感覚です。
5. データが存在しないことを確認する
反対に、データが保存されていないことを確認したい場合もあります。
public function test_user_is_not_saved()
{
$this->assertDatabaseMissing('users', [
'email' => 'no-data@example.com'
]);
}
assertDatabaseMissingは、「そのデータが存在しない」ことを確認します。不要なデータが入っていないかを確認するチェックです。
6. テストごとにデータが消える仕組み
RefreshDatabaseを使うと、テストが終わるたびにデータベースが空になります。これにより、テスト同士が影響し合うことを防げます。
毎回新品のノートを使って練習するような状態なので、前の書き込みに惑わされることがありません。
7. 初心者におすすめな理由
データベースを使ったテストは難しそうに感じますが、RefreshDatabaseを使えば安心して始められます。実際の動作に近い形で確認できるため、「動いているつもり」を防げます。
特に初心者の方にとっては、目に見えないデータの動きを確認できるのが大きな助けになります。
8. LaravelテストとRefreshDatabaseの重要性
Laravelでデータベーステストを行うことは、アプリの信頼性を高める大切な作業です。RefreshDatabaseを使えば、毎回きれいな状態でテストでき、安心して開発を進められます。
失敗を恐れずに試せる環境を作ることが、学習を続けるうえでの大きな支えになります。