2012-09-13 3 views
1

RSpec을 처음 사용하고 Devise가 작동하고 있다는 간단한 테스트를 작성하려고합니다. 임의의 페이지를 선택했으며 로그인하지 않은 사용자가/users/sign_in으로 리디렉션되었음을 보여주는 테스트를 작성하려고합니다.I18N의 기본 설계 사양

describe OrgsController do 

    describe "GET index when not logged in" do 
    it "redirects to new_user_session_path" do 
     user = FactoryGirl.create(:user) 
     user.confirm! 
     sign_in user 
     sign_out user 
     get :index 
     response.should redirect_to new_user_session_path 
    end 
    end 

    before(:each) do 
    user = FactoryGirl.create(:user) 
    user.confirm! 
    sign_in user 
    end 

    # remaining specs 

end 

나는 내 응용 프로그램 컨트롤러에 내가 국제화를 구현 한

"Expected response to be a redirect to <http://test.host/users/sign_in?locale=en> but was a redirect to <http://test.host/users/sign_in>."를 얻을하고 있습니다

before_filter :set_i18n_locale_from_params 

의 관점에서이 작업을 얻을 수있는 가장 좋은 방법은 무엇 :

  • 일치하는 경로를 얻는 중?
  • 이전 (: 각) 블록의 효과를 얻기 위해 사용자에게 서명하고 다시 서명하는 것에 대한 hackishness는?
  • 전반적인 접근 방식은 무엇입니까?

답변

3

컨트롤러 테스트/사양이 제대로 로케일이 오랜 하나 설정하는지고의 문제, 참조 : 당신이 쓴 것과 How to set locale default_url_options for functional tests (Rails)

를, 그것은 기본적으로 로케일을 설정하지 않는 get :index처럼 보인다, 컨트롤러 테스트/사양에서 default_url_options이 작동하지 않기 때문입니다. 일치하는 경로를 찾으려면 위의 링크에서 언급 한 솔루션 중 하나를 시도하십시오. 에 관한

class ActionDispatch::Routing::RouteSet 
    def url_for_with_locale_fix(options) 
    url_for_without_locale_fix(options.merge(:locale => I18n.locale)) 
    end 

    alias_method_chain :url_for, :locale_fix 
end 

: 그것은 가치가 무엇인지에 대한 https://github.com/rspec/rspec-rails/issues/255

, 이것은 내가 현재 자동으로 현재 로케일에서 경로로 전달되는 로케일을 얻기 위해 사양/테스트에 사용 the patch입니다 : 또한 GitHub의에서이 설명을 참조하십시오 before(:each) 블록 설정의 hackishness, 난 정말 문맥 블록을 사용하여 사건을 분리하는 것이 좋습니다, 이전에 필터를 사용하지 않고 하나의 컨텍스트와 사용자를 로깅 블록 전에 사용자가 로깅. 지금 무슨 일이 일어나고 있는지 보려고하는 누군가에게 정말로 혼란 스럽습니다.

+0

시오 야마 - 완벽하게 작동했습니다. 많은 감사합니다. 패치를 config/initializers (http://stackoverflow.com/questions/3420680/monkey-patching-in-rails-3에 따라)에 새 파일에 넣었습니다. 다르게 적용했으면 알려주십시오. –

+0

안녕하세요 기뻤습니다! spec/support /에 파일을 작성한 다음 features/support/custom_env.rb 파일에서 필 요가 오이 테스트에도 적용되도록 요구했습니다. 하지만 기본적으로 rspec에 의해로드 될 수있는 모든 위치에 넣을 수 있습니다. config/initializers에 대한 유일한 것은 당신이 어떤 조건으로 그것을 감싸지 않는 한, 그 파일들이 다른 모드에서도로드된다는 것입니다. 나는 테스트와 관련된 것들을 분리 된 채로 유지하는 것을 선호한다. –