url helper在Capybara功能测试中不使用主机名

时间:2015-04-28 22:55:27

标签: ruby-on-rails ruby rspec capybara actionviewhelper

在我的规范中,我使用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"

至少第二种情况很奇怪,因为它与此评论相矛盾in the source

# 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

视图的内容无关紧要。我知道如何解决它。我想知道这个案例以及将来的参考,为什么这个帮助器的行为不像我期望的那样在测试中,以及如何修复测试

1 个答案:

答案 0 :(得分:0)

功能规范没有加载必要的Rails框架以便计算主机。我很惊讶提供:host选项并不起作用,但并不是很大,因为Rails内部有很多关于路由的URL,解决了很多问题,并且通常都非常聪明。

如果切换到控制器规范,那么您将发现正确的上下文已足够存根,asset_url的工作方式与宣传的一样(没有:host选项)。