2016-10-27 3 views
0

다른 질문을 여기에서 읽었지만 아무도 내 문제를 해결할 수 없습니다. 모두 매개 변수와 관련이 있습니다. 누군가가 나를 도울 수 있기를 바랍니다.Rails4 - 테스트 - URLGenerationError : 일치하는 경로 없음

ActionController::UrlGenerationError: No route matches 
    {:action=>"/login", :controller=>"sessions"} 
test/controllers/sessions_controller_test.rb:6:in `block in 
    <class:SessionsControllerTest>' 

rake routes은 다음과 같습니다 내 :

test "should get new" do 
    puts 'debug: ' + login_path 
    get login_path 
    assert_response :success 
end 

(가) 디버깅을두고 :

Prefix Verb URI Pattern  Controller#Action 
login GET /login(.:format) sessions#new 
     POST /login(.:format) sessions#create 
logout DELETE /logout(.:format) sessions#destroy 

내 시험 자체가이 하나되어

내 컨트롤러의 테스트를 실행 나는이 메시지 라인 프린트 : debug: /login

내 웹 브라우저에서 localhost:3000/login에 갈 때 1,363,210

는 제대로 페이지를로드 및 디버그 정보는 사용하는 것을 SAIS :

controller: sessions 
action: new 

테스트가 제대로 대신 new 조치로 리디렉션 및되지 않는 이유는 어떤 생각을 찾고 존재하지 않는 행동을 위해 /login? 감사!

편집 :

http://blog.bigbinary.com/2016/04/19/changes-to-test-controllers-in-rails-5.html

(내가 사용) Rails4에 컨트롤러 테스트 ActionController::TestCaseget :new해야을 사용하여 솔루션 나는 모든 문제에 대해 설명이 링크를 발견 아래 답변에 따라

get login_url 대신 사용하십시오 (통합 테스트에서는 정상입니다).

+0

왜'get : new' 대신'get login_path'를 사용하고 있습니까? – ArtOfCode

+0

https://www.railstutorial.org/book/basic_login 그냥 코드를 시도하고 일했습니다. 감사! –

+0

튜토리얼 스타일이 작동해야하는지 궁금합니다. –

답변

2

등 시험 방법 get, post, delete, 모두는 어떤 매개 변수 당신이 그 (것)들을 테스트중인 컨트롤러 내에서 행동의 이름을 통과한다고 가정한다. 이 전화는

get :new 

url_for(:controller => :sessions, :action => :new)을 생성하기 때문에 작동합니다. 이 전화는 url_for(:controller => :sessions, :action => '/login')을 생성하기 때문에

get '/login' 

입니다.

기호 양식을 사용하십시오.

1

URL을 사용하여이를 테스트하는 올바른 방법은 get login_path 대신 get login_url을 작성하는 것입니다. path 변수는 (경로가 추가됩니다 이후 브라우저를 통해 볼 때 작동)을 상대 경로입니다 /login를 구성 있도록 테스트의 과정은 브라우저 내에서 실행되지 않기 때문에

이다. 반면에 url 변수는 Universal Resource Locator이므로 절대 경로이고 작동합니다.

+0

그런 식으로 얻을 수 있습니다 :'No route matches {: action => "http://test.host/login", : controller => "sessions"}' –

+0

@PacoAbato Erm,'test.host'에 익숙하십니까? ? –

+0

localhost라고 가정합니다. 어쨌든 실패한 테스트입니다 :'ActionController :: UrlGenerationError : 경로가 일치하지 않습니다 {: action => "http://test.host/login", : controller => "sessions"}' –

관련 문제