如何断言该图像已通过 Capybara 上传?

How to assert that image has been uploaded with Capybara?

假设我有一个表单,用户可以在其中创建一个附有图像的 post。我想确保附加的图像显示在下一页:

visit url
fill_in the_form
click_on 'Create'
assert_selector '.post'
post = Post.first
img = page.find '.post .image'
assert_equal post.file.thumb.url, URI(img[:src]).path

但有人告诉我要避免在系统测试中针对数据库对象断言。那我该怎么办?

只要后端没有发生 "complex" 文件重命名,您在填充表单时就已经知道上传的文件名了:

fill_in the_form

因此,您可以断言该页面包含具有此名称的图像(可能使用 xpath)。

如果有琐碎的文件重命名(例如,用连字符替换空格),那么您可以(理想情况下)只选择一个不会更改的文件名,或者在您的测试中重现重命名。