当前位置: 首页 > 資訊 >

[Day 25] 測試文件上傳

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'
);