Testing File Uploads With Laravel
Published on by Eric L. Barnes
Laravel now includes a new system for testing file uploads through two new fake
methods, one on the UploadFile
class and another on the Storage
facade.
As the documentation shows here is a full test showing it in use:
<?php namespace Tests\Feature; use Tests\TestCase;use Illuminate\Http\UploadedFile;use Illuminate\Support\Facades\Storage;use Illuminate\Foundation\Testing\WithoutMiddleware;use Illuminate\Foundation\Testing\DatabaseMigrations;use Illuminate\Foundation\Testing\DatabaseTransactions; class ExampleTest extends TestCase{ public function testAvatarUpload() { Storage::fake('avatars'); $response = $this->json('POST', '/avatar', [ 'avatar' => UploadedFile::fake()->image('avatar.jpg') ]); // Assert the file was stored... Storage::disk('avatars')->assertExists('avatar.jpg'); // Assert a file does not exist... Storage::disk('avatars')->assertMissing('missing.jpg'); }}
You can also customize the files width, height, and size for testing validation:
UploadedFile::fake()->image('avatar.jpg', $width, $height)->size(100);
Or create other types of files like PDF’s:
UploadedFile::fake()->create('document.pdf', $sizeInKilobytes);
This feature is in the latest Laravel release and you can find out more details in the official documentation.
Eric is the creator of Laravel News and has been covering Laravel since 2012.