【Laravel】画像のアップロードテストを画像ファイルを用意せずに行う

 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());
>株式会社シーポイントラボ

株式会社シーポイントラボ

TEL:053-543-9889
営業時間:9:00~18:00(月〜金)
住所:〒432-8003
   静岡県浜松市中央区和地山3-1-7
   浜松イノベーションキューブ 315
※ご来社の際はインターホンで「316」をお呼びください

CTR IMG