2012-09-19 2 views
0
@user = FactoryGirl.create(:user) 
    @user2 = FactoryGirl.create(:user) 

    @request.env["devise.mapping"] = Devise.mappings[:user] 

    controller.current_user.should be_nil 

    post :create, :user => {email: @user.email, password: @user.test_pass} 
    flash[:alert].should be_nil 
    controller.should(respond_to(:current_user)) 
    controller.current_user.should_not be_nil 

    post :create, :user => {email: @user2.email, password: @user2.test_pass} 

    flash[:alert].should be_nil 
    controller.should(respond_to(:current_user)) 
    controller.current_user.should == @user2 

마지막 하나가 실패합니다. @user2가 아니라 여전히 @user입니다.SessionController # create가 2 명의 사용자와 로그인을 반복 할 때 예상대로 작동하지 않습니다.

편집 : 이렇게하면

,이 사용자가 로그 아웃 세션을 취소하는 공정한 방법이 있나요? 새로운 세션이 될 수 있습니다 전에

class SessionsController < Devise::SessionsController 

    def create 
    if warden.authenticated?(:user) 
     sign_out(current_user) 
    end 
    super 
    end 
end 

답변

1

잘 유증 인증의 흐름이 상당히 논리가, 당신은 로그인 한 번/가입 당신이 리디렉션되고 세션이 시작 캡처됩니다, 당신은 sign_out해야합니다 시작되었습니다.

이제 기본 작성자가 초를 만들 때 첫 번째 사용자를 로그 아웃하도록 요청하는 동작을 테스트하고 있습니다. 잘 고안하지 않는다. 그러나 이것이 당신의 어플리케이션을 위해 필요하다면 왜 콜백 메소드 before_create를 사용하지 않는가?

나는 Red, Green, Refactor의 전체 아이디어라고 생각합니다.

관련 문제