我想在Laravel 5.2上使用文件上传进行一些单元测试。
我是这样做的,请参阅此answer:
/** app/Http/routes.php **/
Route::post('upload', function() {
$fileExists = false;
if ($_FILES['images']) {
$fileExists = true;
}
return ['result' => $fileExists];
});
/** tests/ExampleTest.php **/
public function testUploadFile()
{
$file = new \Symfony\Component\HttpFoundation\File\UploadedFile(
base_path() . '/tests/files/profile.png', 'profile.png');
$response = $this->call('POST', 'upload',
[
'firstname' => 'firstname',
'lastname' => 'lastname',
'promotion' => '2016',
'isCoop' => 1
],
[
'images' => [$file]
]
);
}
但是,当我检查代码覆盖率结果时,routes.php文件中if语句内的行不会执行,如下所示。
似乎上传的文件未插入$_FILES
变量,因此检测为空。
任何想法如何解决它..?感谢。
注意:我使用Larave创建API服务,因此我没有使用表单上传文件
答案 0 :(得分:1)
在laravel 5.2.15之后,这种情况正在发生,因为你正在使用
Symfony\Component\HttpFoundation\File\UploadedFile
而不是
Illuminate\Http\UploadedFile
文件永远不会发送到控制器。
答案 1 :(得分:0)
我认为你应该写:
[
'images' => $file
]
而不是
[
'images' => [$file]
]
另外,你应该在5.2.15之后使用Illuminate \ Http \ UploadedFile而不是Symfony \ Component \ HttpFoundation \ File \ UploadedFile,参见Laravel 5.2 Mocked file upload unit test fails