我正在尝试在Lumen 5.6中测试文件上传,但Illuminate\Http\UploadedFile
fake不会在我的控制器中通过检查。例如:
测试:
use Illuminate\Http\UploadedFile;
use Illuminate\Support\Facades\Storage;
public function testUploadImage()
{
Storage::fake('s3');
$this->actingAs($this->user)
->post('/v1/files', [
'file1' => UploadedFile::fake()->image('avatar.jpg'),
])
->seeJsonStructure([
'file1' => [
'filename',
'mime',
],
])
->assertResponseStatus(201);
...
}
控制器:
public function upload(Request $request)
{
$this->validate($request, [
'file1' => 'required|file|mimetypes:image/jpeg',
]);
// Temp check
if (!$request->hasFile('file1')) {
echo 'no file';
}
$filename = $request->file('file1')->hashName();
$mime = $request->file('file1')->getMimeType();
Storage::disk('s3')
->putFile(
$this->getFolderByMime($mime),
$request->file('file1'),
'public'
);
return $this->respond([
'file1' => [
'filename' => $filename,
'mime' => $mime,
]
]);
}
验证通过,但$request->hasFile('file1')
总是返回false
。
附:我使用Amazon S3来存储文件。
在Lumen中,files参数被硬编码为空。 See Github issue。
发生这种情况是因为传递给post调用中的call方法的files参数被硬编码为空数组。
您需要按如下方式构建调用:
$this->actingAs($this->user)
->post('/v1/files', [], [], [
'file1' => UploadedFile::fake()->image('avatar.jpg'),
])
->seeJsonStructure([
'file1' => [
'filename',
'mime',
],
])
->assertResponseStatus(201);