Writing tests for functions that store files
Jan 28, 2022
You might have a function that generates a pdf, stores an attachment, or uploads an image.
But have do you test that the file is getting created without accessing the real storage?
This is actually very easy with the Storage::fake() method. This method creates a fake disk that you can use for testing.
Here is an example of how you would use it:
<?php
namespace Tests\Feature;
use Illuminate\Support\Facades\Storage;
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function test_csv_file_is_created()
{
Storage::fake('files');
// creates a file called allusers.csv in the 'files' disk
GenerateAllUsersCsv::execute();
Storage::disk('files')->assertExists('allusers.csv');
}
}
In between the parenthesis, you should set the disk name that you are using in your function, in this case, files
, then you can call your function, finally, you can check if the file exists with:
Storage::disk($disk)->assertExists($filename);
(replacing $disk
and $filename
with your values of course)
This will make sure that your real disk is never touched and you can be confident that your function works correctly.