You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Laravel测试中使用Faker上传伪造文件(图片、视频等)

Laravel测试中伪造图片/视频上传的实现方法

Laravel测试套件内置的UploadedFile类fake()方法,可快速生成符合验证规则的伪造文件,无需依赖真实物理文件。

1. 生成指定格式的伪造文件

伪造符合规则的图片

针对你的mimes:jpg,jpeg,bmp,png验证规则,直接用image()方法指定对应格式:

use Illuminate\Http\UploadedFile;

// 生成伪造jpg图片
$fakeJpg = UploadedFile::fake()->image('avatar.jpg');
// 生成伪造png图片
$fakePng = UploadedFile::fake()->image('cover.png');

伪造符合规则的MP4视频

针对mimes:mp4规则,用create()方法指定文件名、大小和对应MIME类型:

// 生成10MB大小的伪造MP4视频
$fakeMp4 = UploadedFile::fake()->create('demo.mp4', 10240, 'video/mp4');

注:第二个参数为文件大小(单位KB),第三个参数必须匹配验证规则对应的MIME类型,确保验证通过。

2. 完整测试用例示例

以下是模拟文件上传、验证规则的测试代码:

<?php

namespace Tests\Feature;

use Illuminate\Http\UploadedFile;
use Tests\TestCase;

class MediaUploadTest extends TestCase
{
    /** @test */
    public function valid_image_and_video_pass_validation()
    {
        // 生成符合规则的伪造文件
        $validImage = UploadedFile::fake()->image('profile.jpg');
        $validVideo = UploadedFile::fake()->create('product.mp4', 5120, 'video/mp4');

        // 模拟POST请求提交文件
        $response = $this->post('/your-upload-route', [
            'image' => $validImage,
            'video' => $validVideo,
        ]);

        // 断言验证通过(根据实际业务逻辑调整断言)
        $response->assertStatus(200);
        // 若业务逻辑包含文件存储,可断言文件已被存储
        UploadedFile::fake()->assertStored($validImage);
        UploadedFile::fake()->assertStored($validVideo);
    }

    /** @test */
    public function invalid_file_format_fails_validation()
    {
        // 生成不符合规则的文件
        $invalidImage = UploadedFile::fake()->image('test.gif');
        $invalidVideo = UploadedFile::fake()->create('test.avi', 5120, 'video/x-msvideo');

        $response = $this->post('/your-upload-route', [
            'image' => $invalidImage,
            'video' => $invalidVideo,
        ]);

        // 断言验证失败并返回对应错误信息
        $response->assertSessionHasErrors([
            'image' => 'The image must be a file of type: jpg, jpeg, bmp, png.',
            'video' => 'The video must be a file of type: mp4.',
        ]);
    }
}

3. 额外实用技巧

  • 伪造图片时可指定尺寸:UploadedFile::fake()->image('test.jpg', 800, 600);(宽800px,高600px)
  • 伪造文件仅存在于内存中,测试结束后自动销毁,无需手动清理磁盘文件

内容的提问来源于stack exchange,提问作者Arslan Majeed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 00:05:23