我有一个路由,我使用约束来检查主机,然后是一个基本上相同但没有主机限制的路由(这些实际上是命名空间,但为了简单起见,这个例子会做):
match "/(:page_key)" => "namespace_one/pages#show", :constraints => proc {|env| env['SERVER_NAME'] == 'test.mysite.local' }
match "/(:page_key)" => "namespace_two/pages#show"
在通过浏览器访问时以及在定义主机和执行get "/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"}>
如果我尝试将 env 转储到约束 proc 中,我得到的只是--- :controller
.
如果我摆脱了 assert_routing 并且只是进行get :show
调用并转储@controller
它确实会解析到正确的控制器(正如预期的那样,这些路由都可以通过 HTTP 请求正常工作)。