在我的规范中,我使用 AssetUrlHelper:
include ActionView::Helpers::AssetUrlHelper
这样我就可以测试一个应该显示我的一个文件的绝对 URL 的页面。我认为asset_url
应该做的伎俩:
asset_url(img.img_file(:medium))
不幸的是,当规范运行时,它没有主机名,例如
(byebug) asset_url("blurg.jpg")
"/images/blurg.jpg"
...即使我将主机名指定为选项也不行:
(byebug) asset_url("blurg.jpg", host: "myhost.com")
"/images/blurg.jpg"
至少第二种情况很奇怪,因为它与源中的这条评论相矛盾:
# If :host options is set, it overwrites global
# +config.action_controller.asset_host+ setting.
#
# ...
#
# asset_url "application.js" # => http://example.com/assets/application.js
# asset_url "application.js", host: "http://cdn.example.com" # => http://cdn.example.com/assets/application.js
这导致了一个错误直到现在才被发现。我的测试认为我的视图输出(错误地)的相对文件路径与应该存在的绝对 url 之间没有区别:
myhost.com/images/blurg.jpg #what I expect the test to check for
/images/blurg.jpg #what the test actually checks for
视图的内容无关紧要。我知道如何解决它。我想知道这个案例和将来的参考,为什么这个助手在测试中没有像我预期的那样表现,以及如何修复测试。