加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – 通过Rails中的assert_routing测试具有主机约束

发布时间:2020-12-17 03:09:03 所属栏目:百科 来源:网络整理
导读:我有一个路由,我正在使用约束来检查主机,然后是一个基本相同但没有主机限制的路由(这些实际上是命名空间,但为了简单起见,这个例子将会这样做): match "/(:page_key)" = "namespace_one/pages#show",:constraints = proc {|env| env['SERVER_NAME'] == 'test
我有一个路由,我正在使用约束来检查主机,然后是一个基本相同但没有主机限制的路由(这些实际上是命名空间,但为了简单起见,这个例子将会这样做):

match "/(:page_key)" => "namespace_one/pages#show",:constraints => proc {|env| env['SERVER_NAME'] == 'test.mysite.local' }

 match "/(:page_key)" => "namespace_two/pages#show"

当通过浏览器访问时以及在定义主机并执行“/ page_key”等时的集成测试中,这些工作完全符合预期.

但是我想编写测试来确保这些路由到目前为止我没有太多运气,因为下面的测试(目前在ActionController :: IntegrationTest中我可以设置主机)匹配没有约束的测试:

assert_routing '',{ :controller => 'namespace_one/pages',:action => 'show' }
=> The recognized options <{"action"=>"show","controller"=>"frontend/pages"}> 
   did not match <{"action"=>"show","controller"=>"namespace_two/pages"}>,difference: <{"controller"=>"namespace_one/pages"}>

如果我尝试在限制proc中转储env,我得到的是—控制器.

如果我摆脱了assert_routing并且只是执行get:show调用并转储@controller它会解析为正确的控制器(正如预期的那样,这些路由都可以通过HTTP请求正常工作).

解决方法

我自己就是这个问题.这是由Rails补丁修复的,该补丁允许您在路由测试中指定完整的URL.

将测试更改为

assert_routing 'http://test.mysite.loacl',:action => 'show' }

它会工作正常.

您必须在完整的URL中包含“://”b / c rails使用正则表达式在路径中查找%r {://},否则它将自动破解URL的主机部分,并且测试将错了.

这是相关补丁http://tinyurl.com/28erq86

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读