У меня есть маршрут, который я использую ограничения для проверки хоста, а затем маршрут, который по существу такой же, но без ограничения хоста (это действительно пространства имен, но для простоты в этом примере будет достаточно):
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-запросы).