如何在 Laravel 中测试文件上传?

Laravel 现在包含了一个新的文件上传测试系统,该系统通过两个新的 fake 方法来实现, 一个在UploadFile 类里面,另一个在 Storage 门面中。

依照文档所言,下面的代码展示了该系统在测试用例中的完整用法:

<?php

namespace Tests\Feature;

use Tests\TestCase;
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseMigrations;
use Illuminate\Foundation\Testing\DatabaseTransactions;

class ExampleTest extends TestCase
{
    public function testAvatarUpload()
    {
        Storage::fake('avatars');

        $response = $this->json('POST', '/avatar', [
            'avatar' => UploadedFile::fake()->image('avatar.jpg')
        ]);

        // 断言文件保存...
        Storage::disk('avatars')->assertExists('avatar.jpg');

        // 断言文件不存在...
        Storage::disk('avatars')->assertMissing('missing.jpg');
    }
}

你也可以自定义文件的宽,高,大小等属性用于测试验证:

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

或者创建其他类型的文件,比如 PDF :

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

这是最新的 Laravel release 版中的特性,你可以在 官方文档 中了解更多细节。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

原文地址:https://laravel-news.com/testing-file-up...

译文地址:https://learnku.com/laravel/t/26367

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!