2014-06-23 3 views
4

내 응용 프로그램에는 세션 컨트롤러가 있습니다. 이제는 내가 로그인 한 경우에만 액세스 할 수있는 사용자 컨트롤러를 테스트하고 싶습니다.세션이있는 레일 컨트롤러 테스트

내 문제는 어떻게 세션을 위조 할 수 있는가입니다. 난 당신이 지금 나를 도울 수 있기를 바랍니다 그래서 이미 많이 시도했다 :

응용 프로그램 컨트롤러 :

helper_method :current_user 
    def authenticate_user 
    current_user 
    if @current_user 
     return true 
    else 
     redirect_to(:controller => 'sessions', :action => 'new') 
     return false 
    end 
    end 

    private 
    def current_user 
    @current_user ||= User.find(session[:user_id]) if session[:user_id] 
    end 

사용자의 컨트롤러가 있습니다

before_filter :authenticate_user 

감사관 테스트 :

describe "GET index" do 
    it "assigns all users as @users" do 
    user = FactoryGirl.create(:user) 
    @request.session[:user_id] = user.id 
    get 'users' 
    expect(@users.size).to eq(1) 
    end 
end 

나는 또한 session[:user_id] = user.id을 시도하고 디버깅을 요청했다 (요청 후) :

  • save_and_open_page 로그인 페이지를 봅시다.

    user = FactoryGirl.create(:user) 
    controller.session[:user_id] = user.id 
    get 'users' 
    expect(@users.size).to eq(1) 
    

    또한이 @users 변수는 테스트에서 정의한 마시기 :

  • @current_user은 전무
  • User.find(session[:user_id])가 올바른 사용자
+0

참고로 레일 5에서는 더 이상이 기능을 사용할 수 없습니다. –

+0

@RobinClowers Rails 5에서는 무엇을합니까? – sscirrus

+0

내 대답보기 : https://stackoverflow.com/questions/37796129/unable-to-set-session-hash-in-rails-5-controller-test/43563901#43563901 –

답변

4

controller 대신 @request의 시도를 반환 항상? 아마도 그것이되어야합니다 expect(User.count).to eq(1)

관련 문제