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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |