2010-12-22 5 views
7

레일즈 프로젝트에서 Omniauth를 사용하고 있는데 "/ login"경로 뒤에 "/ auth/facebook"을 숨기고 싶습니다.레일 : 리디렉션을하는 경로에 대한 스펙을 작성하려면 어떻게해야합니까?

는 사실, 경로 썼다 :

match "/login", :to => redirect("/auth/facebook"), :as => :login 

를이 실제로 /auth/facebook로 리디렉션됩니다 login_path에 즉 링크, 작동합니다.

그러나이 경로 (특히 리디렉션)를 테스트하기 위해 (RSpec) 사양을 작성하려면 어떻게해야합니까?

참고 : /login은 응용 프로그램에 정의 된 실제 작업이나 방법이 아닙니다.

미리 감사드립니다.

+0

[예 RSpec에 경로를 (https://cbabhusal.wordpress.com/2015/12/15/rails-rspec-examples-of-routing-specs/# more-1623) – illusionist

답변

12

사용자 환경에 대한 세부 사항을 제공하지 않았기 때문에는, 다음의 예는 RSpec에 2.x 및 rspec-을 사용하고 있다고 가정 HTTP 상태 코드를 확인해야합니다 3.

# rspec/requests/redirects_spec.rb 
describe "Redirects" do 
    describe "GET login" do 
    before(:each) do 
     get "/login" 
    end 

    it "redirects to /auth/facebook" do 
     response.code.should == "302" 
     response.location.should == "/auth/facebook" 
    end 
    end 
end 

자세한 내용은 rspec-rails의 요청 사양 섹션을 읽고, 레일, 레일.

+0

이것은 작동합니다! 감사! 핵심은 # spec/requests/redirects에서이 스펙을 정의한 것과 같습니다. 이전에는 ApplicationControllerSpec (ApplicationController에서 "/ login"작업을 찾을 수 없음) 또는 "* .should route_to blah"와 함께 spec/routing spec 중 하나에서 오류를 발생 시켰습니다 (불평 한 경로가 존재하지 않음). – winstonyw

+0

그리고 네, 레일스 3에서 rspec (-rails) 2.x를 사용하고 있습니다. – winstonyw

+0

파일 이름을 redirects_spec.rb로 지정해야한다는 점에주의하십시오. 그래야 기본 레이크 작업이 'Rake' 명령 줄에서. – winstonyw

0

당신은 Rack::Test를 사용하여 URL 및

get "/login" 
last_response.status.should == 302 
last_response.headers["Location"].should == "/auth/facebook" 
1

당신은 또한 사용할 수 있습니다

get "/login" 
response.should redirect_to(path) 
관련 문제