การ Test Upload ไฟล์ใน Laravel

16 มกราคม 2565 เวลาอ่าน 3 นาที
การ Test Upload ไฟล์ใน Laravel

Laravel มี ตัวช่วยสำหรับการทดสอบ file upload โดยอาศัย method fake() ในคลาส UploadFile หรือใน facade Storage

การ Fake File Upload

ตัวอย่างการใช้งานตาม Documentation ของ Laravel อธิบายตามนี้

<?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());
    }
}

การ Fake Upload รูปภาพ

เราสามารถ fake upload รูปภาพ โดยใช้ method image() โดยระบุนามสกุลเป็น .jpg, หรือ .png ได้

// Fake รูปภาพประเภท jpeg
UploadedFile::fake()->image('avatar.jpg');

// Fake รูปภาพประเภท png
UploadedFile::fake()->image('avatar.png');

หากเราต้องการจำลองขนาดความกว้างและความสูงของรูปที่ upload เราสามารถระบุ Parameter เพิ่มได้ ดังนี้

UploadedFile::fake()->image('avatar.jpg', $width, $height)->size(100);

การ Fake Upload ไฟล์ PDF

ถ้าเราต้องการ Fake Upload เอกสาร pdf เราสามารถใช้ method create() ในการจำลองไฟล์ pdf ได้

UploadedFile::fake()->create('document.pdf');

การ Fake Upload ไฟล์ Excel จริง

ในบางคร้้งเราต้องการใช้ไฟล์จริง ๆ ที่เราเตรียมไว้เพื่อใช้ทดสอบ upload ไฟล์ เช่น ทดสอบการ Import ไฟล์ จาก excel, csv หรือ .txt ไฟล์ที่เราเตรียมข้อมูลไว้แล้ว เราสามารถใช้ method createWithContent() เพื่อดึงข้อมูลในไฟล์ที่เราเตรียมไว้เพื่อทำการทดสอบ upload ได้ ดังนี้

UploadedFile::fake()->createWithContent(
	'survey_template.xlsx',
	file_get_contents(base_path('tests/Feature/stub/import-template.xlsx'))
);

ดูรายละเอียดเพิ่มเติมได้จาก Laravel Documentation

Phattarachai Chaimongkol

เกี่ยวกับ phattarachai.dev

ผมอ๊อฟนะครับ เป็นผู้ประกอบการอิสระ ที่ปรึกษาทางด้าน Web Application Development ให้แก่องค์กร ธุรกิจ SME และหน่วยงานราชการ
Web Developer ผู้มีใจรักใน Laravel เป็นพาร์ทเนอร์บริษัท Digital Agency ชั้นนำทางด้าน UX/UI เพื่อพัฒนาโปรเจคให้แก่ลูกค้า ผมช่วยสร้างเครื่องมือทางด้าน Web ที่มีคุณภาพให้ผู้ประกอบการดำเนินธุรกิจได้ง่ายขึ้นใช้งานได้จริง เน้นประสบการณ์ ความชำนาญ ผลงานคุ้มค่าเทียบเท่าจ้างงานกับบริษัทใหญ่ ๆ

ยามว่าง ๆ ชอบเล่นเกมส์บน Steam ครับ

เรื่องที่เกี่ยวข้อง

PHP function แสดงขนาดไฟล์แบบคนอ่านรู้เรื่อง เป็น KB, MB, GB
16 มกราคม 2565
PHP function แสดงขนาดไฟล์แบบคนอ่านรู้เรื่อง เป็น KB, MB, GB
คำสั่ง Postgresql ที่เอาไว้ใช้จัดการเกี่ยวกับ Replication
16 มกราคม 2565
คำสั่ง Postgresql ที่เอาไว้ใช้จัดการเกี่ยวกับ Replication
สรุป Taylor Otwell Keynote ใน Laracon US 2024 - Inertia 2.0, VS Code Extension และ Laravel Cloud
16 มกราคม 2565
สรุป Taylor Otwell Keynote ใน Laracon US 2024 - Inertia 2.0, VS Code Extension และ Laravel Cloud