Laravel

Laravelで画像を送信するテストを実装する方法

いつもご利用ありがとうございます。このブログは、広告費によって運営されています。

オススメ本
Web技術を勉強するなら、かなりオススメの雑誌です。毎月新しい発見があります。ついに最終号・・・、みなさん買いましょう!!
読んで損することはない名著。命名で悩むことが多い人はこの本がオススメです。

⇨ Laravel 記事の目次はこちら

Laravel のテスト、PHPUnit で画像を送信するテストを実装する方法について書きました。

環境

Laravel Framework 6.18.41
"phpunit/phpunit": "~8.5",

faker を使う方法

use Illuminate\Http\UploadedFile;
~~~~

public function test_画像を送信する()
{
  $image = UploadedFile::fake()->image('avatar.jpg'); //画像をfakerで作成する

  $data = [
    'image' => $image
  ];
  $route = 'image.store'; //ルーティングで設定したname

  $response = $this->post(route($route),$data);
  $response->assertStatus(200);
}

実際の画像を使ってテストする方法

Faker は便利で、size を変更したりすることもできるし、簡単に実装できるので良いと思います。

しかしながら実際の画像をテストで使用したいと感じることもあると思います。

そのときは、

use Illuminate\Http\UploadedFile;
~~~~

public function test_画像を送信する()
{
  $image = new UploadedFile(
      './tests/Feature/Data/test.jpg', //元ファイルを用意し、そのファイルの相対パスを書く
      'test.jpg', //ファイル名
      'image/jpeg', //mime
      null,
      true
  );

  $data = [
    'image' => $image
  ];
  $route = 'image.store'; //ルーティングで設定したname

  $response = $this->post(route($route),$data);
  $response->assertStatus(200);
}

実際のファイルを送信する方法ができると

この方法は、これだけで様々な mime type に対応することが可能だったりします。

ファイルは画像だけじゃないので1つの選択肢としてアリだと思います。

まとめ

以上です。

誰かの参考になればと思います。

感想・苦情は TwitterDM にご連絡ください。

それでは!

人気記事

PHP7.4 + Laravel6 のプロジェクトを AWS EC2 にデプロイする

【laravel-breadcrumbs】Laravel でパンくずリストを実装する