对 rails 上的文件或图像执行 Rspec 的正确方法是什么?

Whats the proper way to do Rspec with files or images on rails?

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

这是要测试的代码

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

作为用户查看页面 a 我想模拟添加照片或文件的操作,因此它会像这样显示

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

使用 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 但目前不适用于您的用例。