LoginSignup
31
21

More than 5 years have passed since last update.

意外と簡単だったLaravelで画像アップロードテスト

Posted at

Laravelで画像アップロード処理を実装したいのですが、
フロント側まだ作ってないので、テストを作って裏側だけで画像アップロードの挙動を確認したのでその流れを残しておきます。

テスト作成

$ php artisan make:test ImageUploadTest

テストコード

class ImageUploadTest extends TestCase
{
    public function testUploadImage()
    {
        //フェイクディスクの作成
        //storage/framework/testing/disks/designに保存用ディスクが作成される
        //(指定しなければdesignではなくlocalフォルダが保存用に使用される)
        Storage::fake('design'); // テスト後ファイルは削除される
        // Storage::persistentFake('design'); テスト後も画像ファイルが残る

        // 画像アップロード用サービスクラス作成(僕はS3にアップロード)
        $imageService = new ImageService(new S3ImageUploader);

        // UploadedFileクラス用意
        $uploadedFile = UploadedFile::fake()->image('design.jpg');

        // 作成した画像を移動
                // 移動しない場合は /private/var/folders/sf/hfbkqhw17xz_cgzwd5xhp7nm0000gn/T/phprqilrq みたいなパスに保存されてた 
        $uploadedFile->move('storage/framework/testing/disks/design');

        // S3にアップロードする処理
        $imageService->upload($uploadedFile);

        // storage/framework/testing/disks/design内に該当ファイルが存在するか
        // S3にアップロードされたかはS3のバケットを確認しました。
        Storage::disk('design')->assertExists($uploadedFile->getFilename());

    }
}

個人的にはこれで仮画像作成してくれんのが便利だなーと思いました。

$uploadedFile = UploadedFile::fake()->image('design.jpg');

S3へのアップロードはこちらを参考
PHPでAWSのS3に画像アップロード&画像を画面表示(設定〜実装まで)

31
21
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
31
21