2011-06-13 4 views
0

사용자 지정 경로를 통해 호출되는 컨트롤러 메서드를 단위 테스트하려면 어떻게해야합니까?사용자 지정 경로를 통해 호출되는 컨트롤러 메서드를 단위 테스트

관련 경로는 다음과 같습니다 그 경로가 존재하지 않기 때문에 그냥 get :create을 사용할 수 없습니다 SessionsController의 사양에

/auth/:provider/callback(.:format) {:controller=>"sessions", :action=>"create"} 

. 또한 get /auth/facebook/callback/을 사용하면 No route matches {:controller=>"sessions", :action=>"/auth/facebook/callback"}이 표시됩니다. 난 그냥 사양 파일에 request.env [ '무언가']로 설정 한 경우에도, #create 이후 controller.createrequest 해시에서 일부 키에 액세스하고 또 다른 경로로 리디렉션 사용할 수 없습니다처럼

는 또한 같다.

답변

1

기능 테스트는 (파라미터 세트를 제공) 각 작업

결정적으로의 기능을 테스트해야합니다, 당신은 당신의 경로에서 분리하여 기능 테스트를 유지해야합니다. 이

test "#{action_name} - does something" do 
    #{http_verb} :#{action_name}, :params => {:their => "values"} 
    assert_response :#{expected_response} 
end 

주와 같은 기능 테스트 뭔가 보이는 테스트 : 단위에서

(다른 어쨌든 라우팅 추상화의 포인트 기능), 우리는 어디 라우팅 언급하지 않습니다.

그래서에 대한 실제 예를 들어 당신이이 요청에 대한 경로와 일치 할 수없는 경우

test "create - creates a session" do 
    get :create, :provider => "your provider" 
    assert_response :success 
end 

레일 질식 것입니다 만듭니다. 문제가 해결되지 않으면

나는 당신이 두 가지

  1. 을 확인하시기 "GET"올바른 HTTP 동사에게 있습니다
  2. 경로에 다른 필수 매개 변수가없는 (내가 볼 수 제공자는 하나입니다)

라우팅과 관련된 이상한 점이 있다면 나는 보통 별도의 테스트를 추가합니다.

test "create - routing" do 
    assert_recognizes({ 
    :controller => "sessions", 
    :action => "create", 
    :provider => "yourProvider" 
    }, "/auth/yourProvider/callback") 
end 

는만큼이 액션 테스트 와 일치하는 모든 잘해야한다.

+0

'get : create, : provider => 'provider name''이 트릭을했습니다. 고맙습니다! –

관련 문제