Laravel有提供UploadedFile類別,
其中有一個fake方法,
讓我們可以生成一個虛擬的圖片或文件
來測試文件上傳的功能,
而不需要實際上去找個圖片或文件來測試。
譬如說以下的測試語法
<?php
namespace Tests\Feature;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Tests\TestCase;
class ExampleTest extends TestCase
{
public function test_avatars_can_be_uploaded()
{
Storage::fake('avatars');
$file = UploadedFile::fake()->image('avatar.jpg');
$response = $this->post('/avatar', [
'avatar' => $file,
]);
Storage::disk('avatars')->assertExists($file->hashName());
}
}
我們生成了一個avatar.jpg,
然後執行了圖片上傳的方法之後,
再來確認這個圖片是否存在。
所以如果我們想要確認文件是否存在,
就可以使用以下的方法
Storage::fake('avatars');
// ...
Storage::disk('avatars')->assertMissing('missing.jpg');
當然我們也可以指定這個圖檔的寬度、高度、以及大小(KB),
方便我們來做測試
UploadedFile::fake()->image('avatar.jpg', $width, $height)->size(100);
我們也可以建立圖片之外的其他檔案,
譬如一個PDF檔案,
其中$sizeInKilobytes是指定檔案的大小(KB)
UploadedFile::fake()->create('document.pdf', $sizeInKilobytes);
我們也可以指定MIME類型
UploadedFile::fake()->create(
'document.pdf', $sizeInKilobytes, 'application/pdf'
);