Laravel デバッグメモ
Laravel の勉強をしていたら、いくつか解消に手こずるバグがあったので、解決方法をメモ。
Session is missing expected key [errors].
テストを実行したら以下のようなエラーが出た。
テスト
public function test_status_should_be_within_defined_numbers() { $this->seed('TasksTableSeeder'); $response = $this->post('/folders/1/tasks/1/edit', [ 'title' => 'Sample task', 'due_date' => Carbon::today()->format('Y/m/d'), 'status' => 999, ]); $response->assertSessionHasErrors([ 'status' => '状態 には 未着手、着手中、完了 のいずれかを指定してくださ>い。', ]); }
結果
Feature\Task ? Status should be within defined numbers x x Session is missing expected key [errors]. x Failed asserting that false is true. x x /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:850 x /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Foundation/Testing/TestResponse.php:888 x /home/vagrant/code/sample/tests/Feature/TaskTest.php:85 x
エラーメッセージを見ても原因がわからない…
いろいろとぐぐってみたら、以下の記事が参考になりそうでした。
対象のテストに
$this->withoutExceptionHandling();
を挿入すると、エラーメッセージが見やすくなる、かも…思ってやってみたら、
エラーの一番大きな原因は作った FormRequest
クラスのサブクラスを Controller で use していないことでした。
ErrorException thrown with message "Undefined offset: 1"
RegisterController でユーザ登録ページを作成して、
ブラウザから showRegisterForm にルーティングされているアドレスにアクセスしたら、エラー画面が出た。
ErrorException thrown with message "Undefined offset: 1" Stacktrace: #65 ErrorException in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesLoops.php:95 #64 Illuminate\Foundation\Bootstrap\HandleExceptions:handleError in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/Compilers/Concerns/CompilesLoops.php:95 #63 Illuminate\View\Compilers\BladeCompiler:compileForeach in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php:329 #62 Illuminate\View\Compilers\BladeCompiler:compileStatement in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php:311 #61 Illuminate\View\Compilers\BladeCompiler:Illuminate\View\Compilers\{closure} in [internal]:0 #60 preg_replace_callback in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php:312 #59 Illuminate\View\Compilers\BladeCompiler:compileStatements in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php:279 #58 Illuminate\View\Compilers\BladeCompiler:parseToken in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php:171 #57 Illuminate\View\Compilers\BladeCompiler:compileString in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/Compilers/BladeCompiler.php:120 #56 Illuminate\View\Compilers\BladeCompiler:compile in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:51 #55 Illuminate\View\Engines\CompilerEngine:get in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/View.php:142 #54 Illuminate\View\View:getContents in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/View.php:125 #53 Illuminate\View\View:renderContents in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/View.php:90 #52 Illuminate\View\View:render in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Http/Response.php:42 #51 Illuminate\Http\Response:setContent in /home/vagrant/code/sample/vendor/symfony/http-foundation/Response.php:205 #50 Symfony\Component\HttpFoundation\Response:__construct in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Router.php:750 #49 Illuminate\Routing\Router:toResponse in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Router.php:722 #48 Illuminate\Routing\Router:prepareResponse in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Router.php:682 #47 Illuminate\Routing\Router:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30 #46 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/app/Http/Middleware/RedirectIfAuthenticated.php:24 #45 App\Http\Middleware\RedirectIfAuthenticated:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #44 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #43 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php:41 #42 Illuminate\Routing\Middleware\SubstituteBindings:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #41 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #40 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/VerifyCsrfToken.php:75 #39 Illuminate\Foundation\Http\Middleware\VerifyCsrfToken:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #38 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #37 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/View/Middleware/ShareErrorsFromSession.php:49 #36 Illuminate\View\Middleware\ShareErrorsFromSession:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #35 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #34 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Session/Middleware/StartSession.php:63 #33 Illuminate\Session\Middleware\StartSession:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #32 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #31 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/AddQueuedCookiesToResponse.php:37 #30 Illuminate\Cookie\Middleware\AddQueuedCookiesToResponse:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #29 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #28 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Cookie/Middleware/EncryptCookies.php:66 #27 Illuminate\Cookie\Middleware\EncryptCookies:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #26 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #25 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:104 #24 Illuminate\Pipeline\Pipeline:then in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Router.php:684 #23 Illuminate\Routing\Router:runRouteWithinStack in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Router.php:659 #22 Illuminate\Routing\Router:runRoute in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Router.php:625 #21 Illuminate\Routing\Router:dispatchToRoute in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Router.php:614 #20 Illuminate\Routing\Router:dispatch in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:176 #19 Illuminate\Foundation\Http\Kernel:Illuminate\Foundation\Http\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:30 #18 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/fideloper/proxy/src/TrustProxies.php:57 #17 Fideloper\Proxy\TrustProxies:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #16 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #15 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:31 #14 Illuminate\Foundation\Http\Middleware\TransformsRequest:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #13 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #12 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php:31 #11 Illuminate\Foundation\Http\Middleware\TransformsRequest:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #10 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #9 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php:27 #8 Illuminate\Foundation\Http\Middleware\ValidatePostSize:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #7 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #6 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/CheckForMaintenanceMode.php:62 #5 Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode:handle in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:163 #4 Illuminate\Pipeline\Pipeline:Illuminate\Pipeline\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php:53 #3 Illuminate\Routing\Pipeline:Illuminate\Routing\{closure} in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php:104 #2 Illuminate\Pipeline\Pipeline:then in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:151 #1 Illuminate\Foundation\Http\Kernel:sendRequestThroughRouter in /home/vagrant/code/sample/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php:116 #0 Illuminate\Foundation\Http\Kernel:handle in /home/vagrant/code/sample/public/index.php:55
どれも自分が触ってないファイルだから原因がわからない…
本来描画されるであろうテンプレート auth/register.blade.php を見てみたら、
foreach 文を
@foreach($errors->all(() as $message)
と typo していた。
ここを修正しておしまい。
メモ
他、役立ちそうなデバッグ方法