流明文件上传测试:请求中不存在文件
Posted
技术标签:
【中文标题】流明文件上传测试:请求中不存在文件【英文标题】:Lumen file upload testing: file is not present on the request 【发布时间】:2018-12-15 00:23:39 【问题描述】:我正在尝试在 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 来存储文件。
【问题讨论】:
【参考方案1】:在 Lumen 中,文件参数被硬编码为空。 See Github issue.
这是因为文件参数传递给调用 post调用中的方法被硬编码为一个空数组。
您需要按如下方式构造调用:
$this->actingAs($this->user)
->post('/v1/files', [], [], [
'file1' => UploadedFile::fake()->image('avatar.jpg'),
])
->seeJsonStructure([
'file1' => [
'filename',
'mime',
],
])
->assertResponseStatus(201);
【讨论】:
以上是关于流明文件上传测试:请求中不存在文件的主要内容,如果未能解决你的问题,请参考以下文章