제 레일 어플리케이션에서 저는 사용자 인증을 위해 장치를 사용합니다. 나는 또한 전체 웹 사이트에 대해 i18n을 사용하며 각 사용자는 사용자 설정에서 자신 또는 특정 언어를 선택할 수 있습니다. 사용자가 지정된 로케일 세트로 웹 사이트를 탐색하거나 게스트이고 기본 로케일이 사용되는 경우 해당 로케일을 URL에 표시하지 않습니다. 여기 rspec 지원 파일의 확장 클래스에서 현재 개발자를 얻으십시오.
는 예제 : URL이 "anything.com/users/42"같은 것을, 그래서가 게스트는 영어 (기본값) 버전을 사용하지만, 그녀 또는 그 경우는 영구적 (프랑스어로하지 변경 예를 들어 프랑스어 버전에 대한 링크를 클릭하면 url이 "anything.com/fr/users/42"로 바뀝니다. 해당 사용자가 로그인되어 있고 french를 기본 언어로 선택한 경우 다른 방법입니다.
이
이 내 응용 프로그램에서 완벽한 작동 내application_controller
# app/controllers/application_controller.rb
def default_locale
current_user ? current_user.locale : I18n.default_locale
end
helper_method :default_locale
def default_url_options options={}
(I18n.locale.to_s.eql?(default_locale.to_s) ? { locale: nil } : { locale: I18n.locale }).merge options
end
에 다음 줄에 의해 실현된다.
하지만 테스트 할 때 문제가 있습니다. 일부 테스트에서 나는 League
라는 기존 모델과 같은 표현이 있습니다
visit edit_league_path(@league)
expect(page.current_path).to eq league_path(@league)
가 리디렉션을 확인 할 수 있습니다. 리그 edit
에 대한 작업은 관리자 만 허용됩니다.
나는 다음과 같은 방법으로 전에 (관리자가 아닌 사람) 나는 사용자가 로그인 한 고안 사용하고 있기 때문에 : 사용자를위한
# spec/support/controller_macros.rb
module ControllerMacros
def login_user *user_roles
before(:each) do
@request.env['devise.mapping'] = Devise.mappings[:user]
user = FactoryGirl.create(:user, *user_roles)
user.confirmed_at = Time.zone.now
user.save
sign_in user
end
end
end
공장은 임의의 로케일로 임의 사용자를 만듭니다.
I도 (here을 논의 됨) application_controller
에서 default_url_options
이 RSpec에 테스트에서 무시되기 때문에, RSpec에 시험을위한 현지화를 해결 지원 파일을 가지고 :
# spec/support/fix_localization.rb
# workaround, to set default locale for ALL spec
class ActionView::TestCase::TestController
def default_url_options options={}
{ locale: I18n.locale }.merge options
end
end
class ActionDispatch::Routing::RouteSet
def default_url_options options={}
{ locale: I18n.locale }.merge options
end
end
이제 내 문제는, 그 기본 i18n 로켈 집합 (예 : en
)을 사용하여 로그인 한 사용자가 리그의 편집 페이지를 방문하면 해당 페이지를 방문 할 수 없기 때문에 리디렉션됩니다. 리디렉션은 application_controller
에서 default_url_options
메서드를 고려하며 /en/leagues/42
(테스트가 예상 한대로)으로 리디렉션하지 않고 /leagues/42
으로 리디렉션합니다.
이 문제의 해결책은 spec/support/fix_localization.rb
의 default_url_options
메서드를 application_controller
과 동일하게 변경하는 것이지만 지원 파일에서 현재 사용자에게 액세스 할 수 없습니다.
현재 사용자 나 다른 아이디어 또는 문제 해결 방법에 액세스하는 방법에 대한 아이디어가 있습니까?
미리 감사드립니다.