Тестирование маршрутов с ограничениями хоста через assert_routing в Rails - PullRequest
4 голосов
/ 09 марта 2010

У меня есть маршрут, который я использую ограничения для проверки хоста, а затем маршрут, который по существу такой же, но без ограничения хоста (это действительно пространства имен, но для простоты в этом примере будет достаточно):

 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-запросы).

1 Ответ

7 голосов
/ 17 декабря 2010

Просто у меня была эта проблема. Это было исправлено патчем Rails, который позволяет вам указывать полные URL в тестах маршрутизации.

Измените свой тест на

assert_routing 'http://test.mysite.loacl', { :controller => 'namespace_one/pages', 
                                             :action => 'show' }

и будет нормально работать.

Вы должны включить ": //" в полный URL-адрес. B / c-rails использует регулярное выражение для поиска% r {: //} в пути, иначе он автоматически взломает хост-часть url, тест выдаст ошибку.

Вот соответствующий патч http://tinyurl.com/28erq86

...