Capybara attach_file

时间:2016-01-19 05:57:40

标签: ruby-on-rails testing rspec automated-tests capybara

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

attach_file :input_id, Rails.root + "spec/fixtures/sample.jpg"
click_button "Upload"

我的“期望”总是失败,我将一个binding.pry添加到我的控制器来检查原因。事实证明传递给输入文件的是一个字符串。

有没有人遇到同样的问题?有关如何解决问题的任何建议?现在已经坚持这个问题2天了。

修改

忘记提及,输入文件是多种类型

f.attachment_field :input_field, multiple: true

2 个答案:

答案 0 :(得分:2)

试试这个:

attach_file('Image', "spec/files/images/yourtestimg.jpg")

显然,在路径中创建这些文件夹。对不起,我宁愿过度解释,也不愿意解释。 yourtestimg.jpg指的是我放在该文件夹中的实际图像。

快速侧面说明,以上是正确的方法,但有一次我遇到了失败,因为它没有认识到' Image'。在这种情况下,右键单击并检查上载按钮的元素,并查看该字段的名称。在失败中,我所说的字段是名称" post_image'同样,字幕字段被命名为&post; caption。'。一旦我将图像换成了'post_image'它过得很好。

贾斯汀

答案 1 :(得分:2)

我在评论中询问了一个问题,即#attachment_field是否来自重新发送,而你是使用直接模式还是预先签名模式。如果你的答案是肯定的,那么节省时间:

使用直接或预先签名模式时反映不会上传带有表单的文件,而是使用ajax将文件提交到自己的sinatra应用程序,S3等(取决于使用的后端),然后提交id文件上传在隐藏字段中添加到表单中。在这种情况下,你会期望它是一个字符串。您可以详细了解https://github.com/refile/refile#4-rails-helpershttps://github.com/refile/refile#5-javascript-library