如何在 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 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。