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

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

詳細はこちら
Laravel

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

Q&A

1回答

8297閲覧

laravelのexpectExceptionが上手くいかない

stonelike8

総合スコア4

Laravel

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

0グッド

0クリップ

投稿2019/09/25 03:03

前提・実現したいこと

laravel6.0でexceptionをテストするときに例外がキャッチできない状態です。

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

1) Tests\Feature\ExampleTest::exception_test Failed asserting that exception of type "Exception" is thrown.

該当のソースコード

php

1<?php 2 3namespace Tests\Feature; 4 5use Exception; 6use Illuminate\Foundation\Testing\RefreshDatabase; 7use Tests\TestCase; 8 9class ExampleTest extends TestCase 10{ 11 use RefreshDatabase; 12 13 /** @test */ 14 public function exception_test() 15 { 16 $this->expectException(\Exception::class); 17 $this->get("/samples"); 18 } 19}

php

1<?php 2 3Route::get('/', function () { 4 return view('welcome'); 5}); 6 7Route::get('/samples', "SampleController@index");

php

1<?php 2 3namespace App\Http\Controllers; 4 5use Exception; 6use Illuminate\Http\Request; 7 8class SampleController extends Controller 9{ 10 11 public function index() 12 { 13 throw new \Exception("Error Processing Request"); 14 } 15}

試したこと

unitTestの場合は問題なくできました。
また、ブラウザからurlにアクセスしたときも例外自体は吐いています。

php

1class ExampleTest extends TestCase 2{ 3 use RefreshDatabase; 4 5 /** @test */ 6 public function exception_test() 7 { 8 $this->expectException(\Exception::class); 9 $this->get("/samples"); 10 11 throw new \Exception("Error Processing Request"); 12 } 13} 14

testになってないですが、test内で例外を吐かせるとtestは通ります。

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

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

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

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

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

guest

回答1

0

$this->get("/samples"); の場合はSampleControllerindexメソッドを直接呼ぶわけではなく、間に例外ハンドラなどを含んだ状態でのテストになります。そのためindexメソッドが投げた例外は途中で受け取られて予期しない例外が発生したので500応答を返す処理が行われます。したがってgetメソッドの外に例外は出てきません。

php

1 /** @test */ 2 public function exception_test() 3 { 4 $response = $this->get("/samples"); 5 $response->assertStatus(500); 6 }

投稿2019/10/10 08:55

crhg

総合スコア1177

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問