首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel :用Dropzone.js上传测试文件

问Laravel :用Dropzone.js上传测试文件
EN

Stack Overflow用户
提问于 2018-08-09 09:11:46
回答 2查看 1.9K关注 0票数 2

我正在使用laravel 5.6和Dusk进行这个特定的测试。

我正在尝试在我的下拉区域中断言一个文件上传。但是我的Dropzone是以一种没有file输入元素的方式创建的。所以我不能使用attach()方法。

所以我尝试了以下几种方法

代码语言:javascript
复制
$file = new \Symfony\Component\HttpFoundation\File\UploadedFile(base_path() . '/tests/samples/Cylinder.stl', 'Cylinder.stl');

$response = $this->actingAs( $this->user )
                ->from( 'my-url' )
                ->post( route('attachments.store' ) , [
                    'file' => $file
                ]);

但是错误包包含了这个错误。

代码语言:javascript
复制
"errors" => Illuminate\Support\ViewErrorBag {#1194             
  #bags: array:1 [                                             
    "default" => Illuminate\Support\MessageBag {#1189          
      #messages: array:1 [                                     
        "file" => array:1 [                                    
          0 => "The file failed to upload."                    
        ]                                                      
      ]                                                        
      #format: ":message"                                      
    }                                                          
  ]                                                            
}      

当然,当我手工操作时,这是可行的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-01-01 15:58:31

Dropzonejs添加一个具有特定'dz-hidden-input‘类的输入字段。您可以在html页面的底部找到它,很可能就在</body>标记之前:

<input type="file" multiple="multiple" class="dz-hidden-input">

因此,您可以通过附件方法告诉Dusk匹配确切的选择器:

$browser->attach('input.dz-hidden-input', storage_path('app/public/testing/test-file.jpg'));

如果您有一个显示文件名的下拉区域预览和一个“删除文件”按钮,那么您可以链接一些类似这样的断言,以确保文件也可以被删除:

代码语言:javascript
复制
$browser->attach('input.dz-hidden-input', storage_path('app/public/testing/test-file.jpg'))
 ->assertSee('test-file.jpg')
 ->assertSeeLink('Remove file')
 ->clickLink('Remove file')
 ->assertDontSee('test-file.jpg');
票数 6
EN

Stack Overflow用户

发布于 2019-04-17 23:10:17

正如在另一个答案中提到的,该方法位于dropzone.js创建的虚拟输入字段中。但是,如果您有多个单独的下拉区域,这不是一个可行的解决方案,因为无法判断哪个输入字段是附加文件的正确字段。

最好的解决方案是在下拉区域的hiddenInputContainer配置值中。指定一个可用于区分下拉区域的值,例如包含正在配置的下拉区域的div。

然后,您可以将一个文件附加到它(使用Faker作为生成文件的快捷方式):

代码语言:javascript
复制
$image = $faker->image('/tmp', 640, 480);
$browser->attach('#dropzone-image1 input.dz-hidden-input', $image);
$browser->attach('#dropzone-image2 input.dz-hidden-input', $image);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51763089

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档