Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 水豚附卷_Ruby On Rails_Testing_Rspec_Automated Tests_Capybara - Fatal编程技术网

Ruby on rails 水豚附卷

Ruby on rails 水豚附卷,ruby-on-rails,testing,rspec,automated-tests,capybara,Ruby On Rails,Testing,Rspec,Automated Tests,Capybara,我的应用程序中有一个功能测试,测试上传文件。所以我有这样的想法: attach_file :input_id, Rails.root + "spec/fixtures/sample.jpg" click_button "Upload" 我的“期望”总是失败,我向控制器添加binding.pry以检查原因。事实证明,传递给输入文件的是一个字符串 有人遇到过同样的问题吗?对如何解决这个问题有什么建议吗?这个问题已经解决了两天了 编辑 忘了提到,输入文件是一个多类型文件 f.attachment_

我的应用程序中有一个功能测试,测试上传文件。所以我有这样的想法:

attach_file :input_id, Rails.root + "spec/fixtures/sample.jpg"
click_button "Upload"
我的“期望”总是失败,我向控制器添加binding.pry以检查原因。事实证明,传递给输入文件的是一个字符串

有人遇到过同样的问题吗?对如何解决这个问题有什么建议吗?这个问题已经解决了两天了


编辑

忘了提到,输入文件是一个多类型文件

f.attachment_field :input_field, multiple: true
试试这个:

attach_file('Image', "spec/files/images/yourtestimg.jpg")
显然,在路径中创建这些文件夹。对不起,我宁愿过度解释也不愿不解释
yourtestimg.jpg
指的是我放在该文件夹中的实际图像

一个简短的补充说明,上面的方法是正确的,但是有一次我遇到了一个失败,因为它没有识别“图像”。在这种情况下,右键单击并检查upload按钮的元素,查看字段的名称。在失败中,我所说的字段名为“post_image”,同样,标题字段名为“post_caption”。一旦我把图片换成“post_图片”,它就通过了


Justin

我在评论中问了一个问题,关于“附件”字段是否来自refile,而您使用的是直接模式还是预签名模式。如果您的答案是肯定的,为了节省时间:


使用直接或预签名模式时,Refile不会将文件与表单一起上载,而是使用ajax将文件提交到其自己的sinatra应用程序、S3等(取决于使用的后端),然后在添加到表单的隐藏字段中提交文件上载的id。在这种情况下,您可能希望它是一个字符串。您可以阅读更多关于它的信息,并

感谢您的输入。实际上,我在“javascript选择”中没有遇到任何问题,或者文件存在于capybara中。但是,当表单上载了输入文件时,输入文件值实际上是一个字符串而不是一个对象。如果您需要一个示例哈希,我很乐意将其发布在这里。您使用的是哪个库提供了#attachment_field方法?如果重新填充-你是使用直接模式还是预签名模式?哦,这就是为什么!谢谢我已经坚持写了三天的测试了。现在,您有没有关于如何使用capybara的attach_文件测试refile的示例?我必须使用wait函数来等待refile的ajax吗?如果您查看refile项目中的refile.js,默认情况下,它会向文件输入添加一个类“upload”,这样您就可以执行类似于
expect(page.)的操作
要让capybara等待上传完成,或者如果您正在对自定义事件refile Fire执行任何操作,您可以等待这些更改。因此,如果您查看refile项目中的测试,它们使用Capybaras attach_文件,因此您应该在那里获得大量示例