Posted at

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

More than 1 year has passed since last update.

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に画像アップロード&画像を画面表示(設定〜実装まで)