【问题标题】:Whats the proper way to do Rspec with files or images on rails?使用 Rails 上的文件或图像执行 Rspec 的正确方法是什么?
【发布时间】:2020-05-17 14:25:27
【问题描述】:

我正在做一个应用程序,该应用程序需要上传稍后将在另一个视图上显示的图像,但到目前为止,我还没有找到通过使用 Rspec 和 Capybara 的功能来测试它的正确方法

这是要测试的代码

<%= f.label :photo, "Foto"%>
<%= f.file_field :photo%><br>

作为一个看到页面的用户,我想模拟添加照片或文件的动作,所以它会像这样显示

<dt>Foto</dt>
<dd><%= image_tag @applicant.photo %></dd>

【问题讨论】:

  • 显示相关生成的 HTML 而不是 erb,以便我们可以看到 HTML id 等
  • 视图并不是真正重要的部分,我知道我更想知道如何测试表单的填写,但请稍等,我会更新整个.
  • 我没有要求看视图,我要求看相关的 HTML。生成的 HTML 将显示生成的(来自 erb)id、类等,让我为您的问题提供完整的答案。
  • 对不起,你的意思是这个? &lt;label for="applicant_photo"&gt;Foto&lt;/label&gt; &lt;input type="file" name="applicant[photo]" id="applicant_photo" /&gt;&lt;br&gt;

标签: ruby-on-rails rspec capybara


【解决方案1】:

使用 Capybara 时,您可以使用 attach_file 方法通过文件输入上传文件 - https://rubydoc.info/github/teamcapybara/capybara/Capybara/Node/Actions#attach_file-instance_method 该方法采用与文件输入字段 id、名称、占位符、关联标签文本等匹配的定位器。您还可以传递一些其他更具体的选项(参见文档)。在你的情况下,这意味着任何

attach_file('applicant_photo', '/path/to/file/to/attach') # id
attach_file('applicant[photo]', '/path/to/file/to/attach') # name attribute
attach_file('Foto', '/path/to/file/to/attach') # associated label text

应该适合你。从技术上讲,在只有一个可见文件输入字段的页面上,您也可以这样做

attach_file('/path/to/file/to/attach') # will use the only file input on page

attach_file 还具有块接受模式,可在文件输入字段不可见且标签样式化以提供更现代的 UI 但目前不适用于您的用例时使用。

【讨论】:

    猜你喜欢
    • 2012-12-04
    • 2011-06-22
    • 2015-08-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-26
    • 2020-06-28
    相关资源
    最近更新 更多