LaravelでPHPUnitを使ってCRUD処理のテストを自動化②【投稿の編集と更新】

Laravelとテスト

LaravelでPHPUnitを使って、CRUD処理のテストを自動化させる方法を解説します。

今回は投稿の編集画面の表示・投稿の更新のためのテストを書いていきます。

編集と更新は、投稿者本人のみが行えるようにします。権限がない人が処理を行うと、403エラーになります。こういった制限がかかるかどうかも、テストでチェックできるようにします。

実際の開発の現場でも使えるよう、実践的なテストの作り方をご紹介していきますね。

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

Webアプリの前提条件

Webアプリの前提条件や事前準備については、前回の記事にて解説しています。

新規作成画面の表示と保存のテスト方法も解説しています。もし前回記事をご覧頂いていない場合には、まずはこちらをご覧ください。

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

事前準備:Gate(ゲート)の設定

投稿の編集画面表示と更新は、投稿者本人のみが行えるものとします。

この制限を加えるために、app/Providers/AuthServiceProvidersに、次のようにpostゲートを設定しておきます。

【app/Providers/AuthServiceProviders】

コントローラの投稿の編集画面表示と更新のメソッドには、下記のようにpostゲートを設定しておきます。これによって、投稿者本人でなければ、編集・更新ができないよう制限がかかります。

【PostController】

CRUD処理のテスト:投稿の編集ページ表示

投稿の編集ページを表示するためのテストを作っていきましょう。

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

【tests/Feature/PostTest.php】

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

  • factoryを使って新規ユーザー($user)と新規投稿($post)を作成します。$postのuser_idは、$userのidとします。
  • このユーザーとして、投稿の編集ページを開きます。HTTPステータスが200であるかどうかを確認します。HTTPステータスが200であれば、リクエストが無事サーバーで受理された状態ということになります。
  • 次に、もう一人ダミーユーザー($anotherUser)を作成します。先ほど作成した投稿($post)のuser_idは、anotherUserのidに変更します。これによって、$postの投稿者は$anotherUserとなります。
  • この状態で、最初に作った$userが投稿の編集ページを開こうとします。ですが、$userは$postの投稿者ではないために、ページを開けないはずです。この時にHTTPステータスが403であるかどうかを確認します。HTTPステータスが403は、権限がないということになります。

これによって、自分が作った投稿を無事開けるかテストしています。さらに自分以外の人が作成したページを開こうとすると、403エラーになるかどうかをテストできます。

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

無事にテスト通りに進んだ場合には、下記のように返ってきます。

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

CRUD処理のテスト:投稿の更新

引き続き、投稿の更新のテストを書いてみます。

【tests/Feature/PostTest.php】

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

  • factoryを使って新規ユーザー($user)と新規投稿($post)を作成します。$postのuser_idは、$userのidとします。
  • このユーザーとして、投稿を更新します。その後、HTTPステータスが302であるかどうかを確認します。HTTPステータスが302であれば、リクエストが指定したURLにリダイレクトされた状態ということになります。
  •  $this->assertDatabaseHasによって、指定した条件に一致するデータがデータベース中に存在するかを確認しています。
  • 次に、もう一人ダミーユーザー($anotherUser)を作成します。先ほど作成した投稿のuser_idは、anotherUserのidに変更します。これによって、$postの投稿者は$anotherUserとなります。
  • この状態で、最初に作った$userが投稿($post) を更新しようとします。ですが、すでに$postのuser_idは、anotherUserのidに変わっているために、更新できません。この時、HTTPステータスが403であるかどうかを確認します。HTTPステータスが403は、権限がないということになります。

これによって、自分が作った投稿を更新できるかテストしています。さらに自分以外の人が作成したページを更新しようとすると、403エラーになるかどうかをテストしています。

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

無事にテスト通りに進んだ場合には、下記のように返ってきます。

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

さいごに

以上、投稿の編集と更新のためのテストコードを解説しました。

次回は、削除処理について、PHPUnitでどのようにテストを行うか解説していきます。

次回は「投稿者と管理者以外はエラーになる」というテストコードを入れていきます。

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

なお「LaravelでCRUD処理を作る方法を実践的に学びたい」と思ったら、学習サイト【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をコピーしました