4

호스트를 확인하기 위해 제약 조건을 사용하는 경로가 있고 본질적으로 동일하지만 호스트 제한이없는 경로가 있습니다.이 경로는 실제로 네임 스페이스이지만 단순하지만 이 예는) 할 것입니다 :레일에서 assert_routing을 통해 호스트 제약 조건을 테스트하는 경로

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" 등 내가이 보장 테스트를 작성하려는 그러나

경로는 지금까지 작동합니다. 나는 다음과 같은 테스트 (현재는에 속합니다.는 그래서 제약없이 하나와 일치하는 경우) 호스트를 설정할 수 있습니다

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를 덤프하려고하면 제약 내가 할 모든 --- :controller이다 발동에.

내가 assert_routing을 없애고 get :show 전화하고 덤프하면 @controller은 올바른 컨트롤러로 해결됩니다 (예상대로 이러한 라우팅은 모두 HTTP 요청을 통해 정상적으로 작동합니다).

답변

6

이 문제가 발생했습니다. 이것은 라우팅 테스트에서 전체 URL을 지정할 수있는 Rails 패치로 수정되었습니다.

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

에 테스트를 변경

하고 그것을 잘 작동합니다.

전체 URL에 ": //"를 포함해야합니다. 레일스가 정규식을 사용하여 경로에서 % r {: //}을 찾거나 URL의 호스트 부분을 자동으로 해킹합니다. 테스트에서 오류가 발생합니다.

다음은 relavent 패치입니다. http://tinyurl.com/28erq86

관련 문제