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

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

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

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

PHPUnit

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

Q&A

解決済

2回答

1141閲覧

laravel6でのテストについて(ログイン認証からのページ遷移)

nakatievent

総合スコア38

Laravel

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

PHPUnit

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

0グッド

0クリップ

投稿2021/12/03 06:51

編集2021/12/03 06:58

お疲れ様です。
現在、Laravel6でテストコードを書いているのですが分からないことがありますのでご教授お願いします。

公式リファレンスやUdemyの動画、または他のサイトのコードを参考にして**「ログイン後に企業一覧ページへ画面遷移する」**というテストを書いているのですが、それがうまく行きません。

該当のコードは下記の通りになります。

php

1 /** 2 * ログイン後に企業一覧ページへ移動 3 */ 4 public function testGoToCompanyListPageAfterLoginTest() 5 { 6 $this->withExceptionHandling(); 7 8 $user = factory(User::class)->create(); 9 10 log::debug($user); //右のコードはデバッグ用のコードです。 11 12 $this->actingAs($user)->get('admin/company')->assertStatus(200); 13 }

テストを実行したところ、ログインに失敗してログインページへリダイレクトされるため302エラーが出てしまいます。

php

11) App\Models\Admin\ExampleTest::testgoToCompanyListPageAfterLoginTest 2Response status code [302] does not match expected 200 status code. 3Failed asserting that false is true. 4 5/Users/○○○○○/Desktop/admin/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:89 6/Users/○○○○○/Desktop/admin/tests/Feature/ExampleTest.php:74

ユーザーが登録されていないのかと思い試しに$userをデバッグしたところ、一応ユーザー自体は登録されています。

php

1[2021-12-03 15:35:08] testing.DEBUG: {"name":"\u4e2d\u6d25\u5ddd \u5e79","email":"hsakamoto@example.net","email_verified_at":"2021-12-03 15:35:08","role":"Nm569QXiVC","updated_at":"2021-12-03 15:35:08","created_at":"2021-12-03 15:35:08","id":1}

ただ、下記のコードだと成功します。

php

1 /** 2 * ログインテスト 3 */ 4 public function testloginTest() 5 { 6 $this->get('admin/login')->assertStatus(200); 7 8 User::create([ 9 'name' => 'admin', 10 'email' => 'admin@○○○○○.co.jp', 11 'password' => bcrypt('○○○○○'), 12 ]); 13 14 $this->post('admin/login', [ 15 'email' => 'admin@○○○○○.co.jp', 16 'password' => '○○○○○', 17 ]) 18 ->assertRedirect('admin/company'); 19 }

色々と試したのですが解決できないため、分かる方いましたらご教授お願いします。

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

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

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

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

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

skys215

2021/12/03 07:54

`admin/`にはミドルウェアを設置してますか?
nakatievent

2021/12/03 07:57

はい、設置しています。
skys215

2021/12/03 09:46

authに設置したのですか?
guest

回答2

0

バリデーションエラーか何かが発生してないでしょうか?
以下のように get() の後に、dump() して、何かヒントが見つからないでしょうか?

php

1$this->actingAs($user)->get('admin/company'); 2 3dump(session()->all());

投稿2021/12/03 08:35

nshiro

総合スコア185

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

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

0

自己解決

本システムの構造を再度確認したのですが、そもそも自分が今携わっている本システムに新規登録する機能はなく、開発者側がシーダーで登録した管理者がログインアカウントを作成する仕様になっているので、それでできないのかもしれません。
ですので、一旦本質問は閉じさせて頂きます。
お時間を頂きありがとうございました????‍♂️

投稿2021/12/03 12:57

nakatievent

総合スコア38

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問