質問をすることでしか得られない、回答やアドバイスがある。

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

新規登録して質問してみよう
ただいま回答率
85.35%
Laravel

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

PHPUnit

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

Q&A

解決済

1回答

895閲覧

Laravel6 phpunit8 withSession() を呼ぶとErrorException

darum

総合スコア70

Laravel

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

PHPUnit

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

0グッド

0クリップ

投稿2020/02/19 12:55

編集2020/02/20 09:26

環境

  • Docker 19.03.5
  • docker-compose 1.24.1
  • php7.3
  • laravel 6.11.0
  • phpunit 8.5.2
docker-compose run phpunit

とやると、vendor/phpunit/phpunit/phpunit が動作するようにDockerfileを作成し、
laravelのphunitを実行しています。

下記のようなコードで、withSession() が, ErrorExceptionになります。

php

1 public function test一覧表示() 2 { 3 $response = $this->actingAs($this->user) 4 ->withSession(['contract_id' => $this->contract->id]) 5 ->get('/manage/work_type'); 6〜略〜

エラー

1) Tests\Feature\Mng\WorkTypeListTest::test一覧表示 ErrorException: Trying to get property 'cookies' of non-object /laravel/vendor/laravel/framework/src/Illuminate/Session/CookieSessionHandler.php:69 /laravel/vendor/laravel/framework/src/Illuminate/Session/Store.php:97 /laravel/vendor/laravel/framework/src/Illuminate/Session/Store.php:87 〜略〜

エラーの該当箇所は以下になりますが、変数名から行くと、Requestオブジェクトが正しく生成されていないと想像しているのですが、
原因がわかりません。

https://github.com/laravel/framework/blob/6.x/src/Illuminate/Session/CookieSessionHandler.php#L69

何かアドバイスいただけないでしょうか。

よろしくお願い申し上げます。

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

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

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

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

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

guest

回答1

0

ベストアンサー

Laravelはテスト時にはテスト用のarrayという特別なセッションドライバを使うようにphpunit.xmlに記述されています。

エラーメッセージからいってcookieドライバが使われているようなので設定が効いていないですね。

ありがちな原因としては、設定をconfig:cacheでキャッシュしているため、phpunit.xmlでの設定が無視されていることがあります。確認してみてください。キャッシュしていたらconfig:clearでクリアする必要があります。

これについてはマニュアルのテスト:テストの準備>環境にも書いてあります。

テスト実行前には、config:clear Artisanコマンドを実行し、設定キャッシュをクリアするのを忘れないでください。

投稿2020/03/01 12:24

crhg

総合スコア1177

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

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

darum

2020/03/02 04:27

ご指摘の通りでした。 sessionがcookieを使ってるのが正しくないということが理解及びませんでした。 なお、DockerfileのENTRYPOINTを、hoge.shにして、 ./artisan cache:clear vendor/bin/phpunit が走るようにしたことを追記しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問