如何测试上传到路由的假文件,以验证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)
{
...
  • 请求:
类XXXRequest扩展了FormRequest { /** *确定用户是否有权提出此请求。 * *@returnbool */ 公共职能授权() { 返回true; } /** *获取应用于请求的验证规则。 * *@return数组 */ 公共职能规则() { 返回[ “名称”=>“必需”, “发票”=>“可为空的|文件”, ]; } 试试这个:

测试:


只需从本地文件创建一个上载文件并将其添加到您的请求中:

使用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']
    ]);