LaravelでPHPUnitを使ってCRUD処理のテストを自動化①【投稿の作成と保存テスト】

Laravelとテスト

LaravelでPHPUnitを使って、CRUD処理のテストを実施する方法を解説します。今回は投稿の新規作成ページの表示と、保存のためのテストコードを書いていきます。

面倒なテストを自動化して、開発作業を効率化していきましょう♪

PHPUnitの基本的な使い方を知りたい場合は、まずは下記記事をご覧ください。

本記事は、CRUD処理を使ってWebアプリ開発ができる方向けのものとなります。テストの前提となるWebアプリは既に開発済みのものとして、本記事では詳しく解説しません。

Webアプリの前提条件

今回テストを行うためのWebアプリは、次のものとします。

■UserモデルとPostモデルがあり、データベースにはusersテーブルとpostsテーブルがある。

■usersテーブルとpostsテーブルは、次のような形で1対多のリレーションが設定してある。

■Webアプリには、postsテーブルにデータを作成・保存・更新・削除するための処理が入っている(CRUD処理が搭載済みとします)。

■routes/web.phpファイルには、下記のようにルート設定が入っている。

【routes/web.php】

事前準備:PHPUnitの新規テスト作成と設定

まずは、前準備としてテストファイルの作成と設定を行っておきます。

下記コマンドを実行して、テストファイルを作成します。

tests/Feature/Post/PostTest.phpファイルが出来ます。今後は、このファイルにテストを書きます。

tests/Feature/Postの中のテストファイルのみを実行するよう、プロジェクト直下のphpunit.xmlの設定を変更しておきます。

【phpunit.xml】

デフォルトでは、Featureの中にログイン等のテストが用意されています。どのテストを実行するかはお好みで変えてください。

また、下部のデータベース名の設定も変更しておきましょう。

たとえば、”aaa”という名前でしたら、下記のようにします。

事前準備:ファクトリーの作成

もうひとつ、準備をしておきましょう。

テストを行う時には、factoryを使ってダミーデータを作成します。ユーザーのダミーデータを作るfactoryはあらかじめあるので、今回はこれを使っていきます。

ユーザー以外に、投稿のダミーデータを作るためのfactoryも必要となります。こちらを作っておきましょう。下記コマンドを実行して、PostFactoryを作成します。

次に、database/factories/PostFactory.phpファイルを開き、下記のようにコードをいれておきます。

【PostFactory.php】

なおコードは、データベースの構造によって異なります。今回はpostsテーブルにtitleとbodyとuser_idがあるという想定でコードをいれています。

データベースの構造によって、内容は変えてくださいね。

CRUD処理のテスト:新規投稿作成ページ表示

それではいよいよ、テスト用シナリオを入れていきます。まずは、新規投稿作成ページを表示するためのテストを作っていきましょう。

tests/Feature/Post/PostTest.phpを開き、下記のようにコードを加えます。

【tests/Feature/Post/PostTest.php】

コードの意味を解説します。

  • factoryを使って新規ユーザーを作成します。
  • $this->actingAs($user)  によって、作成したユーザーを現在のユーザーとして認証しています。つまりこの後の動作は、作成したユーザーが行ったことにできます。
  • その後に->get(‘/post/create’); と入れています。これによって、作成したユーザーが ‘/post/create’ページを開いたことにします。
  • $response->assertStatus(200);は、HTTPステータスが200であるかどうかを確認するコードです。HTTPステータスが200であれば、リクエストが無事サーバーで受理された状態ということになります。

上記コードによってダミーのユーザーを1人作成して、この人に、投稿の新規作成ページにアクセスできるかテストしてもらっているわけです。

コードを保存したら、下記コマンドを実行します。

ユーザーが無事にページを開ける場合には、下記のように返ってきます。

データベースを確認すると、ユーザーが1人登録されています。確認してみてください。

CRUD処理のテスト:新規投稿保存機能

続いて、CRUD処理のテスト2つ目、新規投稿保存のためのテストを作ってみましょう。

tests/Feature/PostTest.phpに下記のコードを追加します。

【tests/Feature/PostTest.php】

コードの意味は下記のとおりです。

  • factoryを使って新規ユーザーを作成します。
  • $this->actingAs($user)  によって、作成したユーザーを現在のユーザーとして認証しています。つまりこの後の動作は、作成したユーザーが行ったことにできます。
  • その後の->post 以下のコードによって、このユーザーによる新規投稿を作成しています。
  • $response->assertStatus(302);は、HTTPステータスが302であるかどうかを確認するコードです。HTTPステータスが302であれば、リクエストが指定したURLにリダイレクトされた状態ということになります。
  •  $this->assertDatabaseHasによって、指定した条件に一致するデータがデータベース中に存在するかを確認しています。

上記コードによってダミーのユーザーを1人作成して、この人に投稿を新規作成してもらいます。その後、無事データがデータベースに保存されているかをテストしています。

コードを保存したら、下記コマンドを実行します。

無事にデータが保存された場合には、下記のように返ってきます。

データベースには、ユーザーと投稿のデータが1つずつ保存されているはずです。確認してくださいね。

データベースにテストデータが保存されるのを避ける方法

テストを行うと、そのたびにデータベースにテストデータが加わっていきます。

「テストのたびにデータが保存されるのを避けたい」という場合は、tests/Feature/PostTest.phpの上部に下記のコードを追加します。

【tests/Feature/PostTest.php】

ただしコードを入れると、既存のデータも消えてしまいます。

ご利用には注意してくださいね。

 さいごに

今回は、PHPUnitを使って、CRUD処理のうち、【新規作成ページ表示】と【投稿の新規保存】のテストを自動化するための方法を説明しました。

CRUD処理では、編集・更新・削除の処理も入ってきます。

次の記事では、これらの処理について、PHPUnitでどのようにテストを行うか解説していきます。

引き続きPHPUnitを実践的に使っていきましょう♪

なお「そもそもCRUD処理を作る方法について分からない」「Laravelの基本の使い方を学びたい」

と思ったら、学習サイト【Laravelの教科書】をご活用ください。

こちらは、Laravelの使い方を学びつつ、CRUD処理をどんどん使って、実際のフォーラムサイトを作成していく実践的な教材です。

【Laravelの教科書を通じて作成するWebアプリのサンプルページ】

Laravelの教科書について詳しく知る

基礎編は無料です♪気になったら、上記ボタンをクリックして案内ページを見てみてくださいね。

Laravelとテスト

【Laravelの教科書・プレゼント】

Junko
Laravelの使い方を覚えたい!と思ったら、ぜひ、役立ててほしいです。 基礎編は無料でプレゼント中です♪
ひつじプログラマ
会員制サイトをいちから作っていくよ。ボタンをクリックして詳細を見てね。
Laravelの教科書の詳細を見る

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

【無料プレゼント】

「LaravelでWebアプリをいちから作れるようになりたい!」

そんなLaravel初心者のあなたへ【Laravelの教科書】基礎編プレゼント中! 会員制フォーラムサイトを学習しながら作れます。

詳細はこちらをクリック

最新のLaravel10版テキストに加え、Laravel8版・Laravel9版もご用意しています♪

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。
Laravel10対応。Laravel11サポートガイドもご用意しています。詳しくは下記ボタンをクリック♪

書籍の詳細を見てみる

Laravelの本を書きました。


ひつじが目印♪
クリックするとamazonページへ。

Laravel10対応

Laravelの使い方を分かりやすく解説した書籍を出版しました。書店やAmazon等のオンラインショップにて販売中です。

書籍の詳細を見てみる

 

Laravelの教科書限定コミュニティ【Laravelの教科書ラボ】はじめました。
デプロイ講座付。StripeやChatGPT連携など過去10回分のセミナー動画視聴可能。

Laravel実践スキルをのばしたい方におすすめです。

ラボの案内を見てみる

Twitter始めました。
40代からプログラミング!
タイトルとURLをコピーしました