Laravelのテスト機能の中に題を実現できるものがあります。次のリンク先の”ファイルアップロードのテスト”に説明があります。
HTTPテスト 6.x Laravel
次の様に書くとアップロードとレスポンスを実行できます。
$request = [ 'images' => [ // UploadedFile::fake()から色々できます $originalImage = UploadedFile::fake()->image('dummy.jpg'), ] ]; $this->response = $this->json( 'POST', route('image.upload'), $request );
レスポンスは通常のHTTPテスト同様に次の様に書いたり
public function testUploadImageSuccess(): void { // 上述のアップロードとレスポンス取得処理 $this->assertApiResponseHas('imageUrls'); } public function assertApiResponseHas($key): void { $responseData = $this->getDecodedResponseBody(); $this->assertTrue(\Arr::has($responseData, $key), "レスポンスに${key}が見つかりません"); } /** * レスポンスのデータ本体を抜き出す * @return array */ public function getDecodedResponseBody(): array { return json_decode($this->response->getContent(), true); }
セットでダウンロードできるかテストしたり
// 上述のアップロードとレスポンス取得処理 foreach ($responseBody['imageUrls'] as $url) { $imageResponse = $this->json( 'GET', $url, ); $this->assertEquals(HttpStatus::OK, $imageResponse->getStatusCode()); }
ファイルが実際に保存されたかテストしたりできます。
Storage::disk('userUploaded')->assertExists($originalImage->getClientOriginalName());