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.
Filed in: