🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

Q&A

1回答

5448閲覧

Laravel ユニットテスト セッション操作を行うメソッドのテストがしたい

Hirakin3

総合スコア33

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

PHPUnit

PHPUnitは、PHP向けのユニット・テスト向けフレームワークで、手動では手間のかかるテスト作業を自動化し、繰り返し実行することが可能です。

0グッド

0クリップ

投稿2019/11/28 07:36

編集2019/11/28 13:59

ユニットテストでセッションを意図した通りにできず困っています。

前提・実現したいこと

・ブラウザからアクセスすると正常に動作する。
・テストからセッション、リクエストを渡してブラウザをおなじ動作になることを確認したい。
・メソッド単位でテストがしたい。

テストは以下の流れで考えています。
1.ユニットテストでセッションを追加
2.処理するメソッドにセッション付きで引数を渡す
3.結果を受け取り判定する

発生している問題・エラーメッセージ

メソッドに渡す方法が不明

こちらの内容とアドバイスいただきましたが、
具体的な使い方がわかっていません。
https://readouble.com/laravel/5.5/ja/http-tests.html

結果: 1) Tests\Unit\getHogeTest::testController BadMethodCallException: Method Illuminate\Http\Response::input does not exist. // $request->input('hoge1', 0);の部分が動かないため

該当のソースコード

php

1モデル 2class Hoge 3{ 4 public function getHogeList(Request $request) 5 { 6 $hoge1 = $request->input('hoge1', 0); 7 $hoge2 = $request->input('hoge2', 0); 8 // Code..... 9 } 10}
テスト内容 public function testHogeSession() { $request = new Request(); //リクエスト作成 $request->merge('hoge','hoge') $response = $this->withSession(['hohe','hoge']); //セッション追加   // どのタイミングでリクエストにセッションを追加する? $hoge = new Hoge(); //インスタンス作成 $result = $hoge->getHogeList($request); //空のインスタンスなのでエラー }

ユニットテスト自体は初めてです。
見苦し書き方あるかと思いますがご確認くださいませ。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こちらについている回答が参考になります。
https://teratail.com/questions/225919

「セッション/認証」の項目を合わせてお読みください。
https://readouble.com/laravel/6.x/ja/http-tests.html

投稿2019/11/28 07:40

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hirakin3

2019/11/28 07:58 編集

ありがとうございます。 この場合、indexメソッドは指定できないということでしょうか? 誤って解釈しているため、適切な動作が分かっておりません。
退会済みユーザー

退会済みユーザー

2019/11/28 07:58

実際のコードと違っているのかと推測しますが、Controller という本来あり得ないクラスをインスタンスかしていたり、摩訶不思議なコードなので何も判断できません。
Hirakin3

2019/11/28 08:18

内容が適当でなく失礼しました。 クラス名などを変更しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問