この記事の目的
- laravel9にてstoreメソッドのテスト実行時に出たエラーについての備忘録
エラー
エラー内容
Class "App\Http\Controllers\Request" does not exist
エラー原因
- 簡潔にいうとエラーで表示された内容通り
App\Http\Controllers\Request
が通っていないということ。 - storeメソッドの引数を勝手に変更してしまったこと
詳細
laravel9でプロジェクトを作成しコントローラー等を作成した後にデフォルトのstoreメソッドを参考にしていたサイトと同じように下記のような変更を行なってしまっていた
public function store(StoreTaskRequest $request)
public function store(Request $request)
これによってuse App\Http\Requests\StoreTaskRequest;
が記載されたいたものが使用されなくなり
わざわざuse App\Http\Controllers\Request
を記載しなければいけない状態にしてしまっていた。
エラー対応
- 対応もそもそも必要なく
public function store(StoreTaskRequest $request)
を使用すれば良いだけ. -
public function store(Request $request)
するならuse Illuminate\Http\Request;
を追加する
参考しているののもバージョン等が違うことやなぜ記載が異なるのかを考えてなく脳死で作業していたことがいけなかった、、戒め
エラーが出た経緯(一応)
作成したstoreメソッドのunitテストを実行したら上記のエラーが表示された
①storeメソッド
処理はシンプルにリクエストで送られた情報の登録
app/Http/Controllers/TaskController.php
/**
* @param Request $request
* @return \Illuminate\Http\JsonResponse
*/
public function store(Request $request)
{
$task = Task::create($request->all());
return $task
? response()->json($task, 201)
: response()->json([], 500);
}
②テストコード
tests/Feature/TaskTest.php
/**
* @test
*/
public function 登録テスト()
{
// 登録するデータの作成
$data = [
'title' => 'テスト投稿'
];
// storeメソッドはpostで受け取るためpostJsonとし第2引数にデータを指定する
$response = $this->postJson('api/tasks', $data);
dd($response->json());
$response->assertStatus(201);
}
③テスト実行
vendor/bin/phpunit tests/Feature/TaskTest.php --filter "登録テスト"
参考サイト
Laravel - 対象クラス [App\Http\Controllers\Request] が存在しない - 解決済み