如何测试上传到路由的假文件,以验证Laravel中的文件?
我试图在我的控制器中为路由“存储”编写一个测试单元,通过我的方法的验证器传递一个要测试的假文件,但我得到的只是数据不是一个文件:如何测试上传到路由的假文件,以验证Laravel中的文件?,laravel,file,unit-testing,testing,Laravel,File,Unit Testing,Testing,我试图在我的控制器中为路由“存储”编写一个测试单元,通过我的方法的验证器传递一个要测试的假文件,但我得到的只是数据不是一个文件: Illuminate\Foundation\Testing\TestResponse { +baseResponse: Illuminate\Http\JsonResponse { #data: "{ "message":"The given data was invalid.", "errors":
Illuminate\Foundation\Testing\TestResponse {
+baseResponse: Illuminate\Http\JsonResponse {
#data: "{
"message":"The given data was invalid.",
"errors":{"invoice":["The invoice must be a file."]}
}"
代码:
- 测试:
$data=factory('App\Domain\X\X')->raw(['creator\u id'=>$user->id]);
$data['invoice']=上传文件::false()->create('invoice.xlsx');
$response=$this->json('POST',route('x.store',$data));
- 控制器:
公共功能存储(XXXRequest$request)
{
...
- 请求:
只需从本地文件创建一个上载文件并将其添加到您的请求中:
使用lightlight\Http\UploadedFile;
$filename=public_path('tests/invoice.pdf');
$file=新上载的文件($filename,'invoice.pdf','application/pdf',filesize($filename),null,true);
$this->post(“/”[
“发票”=>$file,
]);
如果我想使用Spatiale media library,Jinal的解决方案就不行这两种解决方案都很好,可以创建一个包含文件的请求。UploadedFile::fake()正在创建一个新的UploadedFile。当然,忘了向json方法添加数据参数!谢谢
$data = factory('App\Domain\X\X')->raw(['creator_id' => $user->id]);
$data['invoice'] = UploadedFile::fake()->create('invoice.xlsx');
$response = $this->json('POST', route('x.store', $data), [
'name' => 'abc',
'invoice' => $data['invoice']
]);