2009-06-16 5 views
5

내 컨트롤러 중 일부에 사용자가 로그인되어 있는지 확인하는 before_filter가 있습니까? CRUD 작업.기능 테스트 Authlogic?

application.rb

def logged_in? 
    unless current_user 
    redirect_to root_path 
    end 
end 

private 
def current_user_session 
    return @current_user_session if defined?(@current_user_session) 
    @current_user_session = UserSession.find 
end 

def current_user 
    return @current_user if defined?(@current_user) 
    @current_user = current_user_session && current_user_session.record 
end 

하지만 지금 내 기능 테스트가 실패 루트의 리디렉션 때문이다. 그래서 세션이 생성되었다는 것을 시뮬레이트하는 방법이 필요합니다.하지만 시도한 것은 아무것도 없습니다. Heres는 내가 지금 가지고 테스트가 거의 무시 무엇을 :

test_helper.rb

class ActionController::TestCase 
    setup :activate_authlogic 
end 

posts_controller_test.rb

class PostsControllerTest < ActionController::TestCase 
    setup do 
    UserSession.create(:username => "dmix", :password => "12345") 
    end 

    test "should get new" do 
    get :new 
    assert_response :success 
    end 

내가 실종 무엇인가?

답변

5

당신은 UserSession.create에 같은

뭔가 액티브 오브젝트를 전달해야합니다.

setup :activate_authlogic 

그런 다음 Anton Mironov가 지적한대로 올바른 사용자 레코드가 필요합니다. 당신이 설정 Authlogic 모든 테스트를 원하는 경우 test_helper.rb에서

+3

아직 의존하지 않는 앱을 ​​가지고 있다면 테스트를 위해 비품에서 멀리 나가는 것이 좋습니다. 그들은 유지하기가 힘들며 실제로 실망합니다. railscast, Factories Not Fixtures를 확인하십시오. – nitecoder

+0

컨트롤러에서 적절한 수표가 호출되었다는 것을 테스트하지 않는 것과 같은 사용자를 생성하여 (예 : 로그인해야하며 관리자 여야 함). 예상되는 메소드를 조롱하여 호출되도록하는 것이 좋습니다 (예 : mocha : mock (@controller) .expects (: current_user) .returns (@user) –

3

내 컨트롤러에 대한 내 rspec 테스트에서 수행하는 작업은 Machinist를 사용하여 사용자를 만든 다음 해당 사용자를 current_user로 할당하는 것입니다.

def login_user(options = {}) 
    user = User.make(options) 
    @controller.stub!(:current_user).and_return(user) 
end 

이렇게하면 current_user가 컨트롤러에 연결됩니다. 그러면 logged_in? 메서드는 테스트에서 작동합니다.

분명히 Test :: Unit에서 작동하려면이 기능을 사용해야 할 것입니다. 사용하지 않으면 Machinist를 사용하지 말고 rspec을 사용합니다.하지만 원리는 같습니다.

u = users(:dmix) 
UserSession.create(u) 
4

http://rdoc.info/github/binarylogic/authlogic/master/Authlogic/TestCase

먼저 당신이 당신의 테스트에서 사용할 수 있도록 AuthLogic를 활성화해야합니다

+0

문서에 대한 링크가 죽었으니 다음을 시도하십시오. http://rdoc.info/github/binarylogic/authlogic/master/Authlogic/ TestCase –

+1

해당 페이지는 잘못 작성된 것입니다. 설정 행이 어디로 가야하는지 명확하지 않습니다. – Eric

1

넣어이 :

class ActionController::TestCase 
    def self.inherited(subclass) 
    subclass.instance_eval do 
     setup :activate_authlogic 
    end 
    end 
end 
+0

이 비트는 루비 1.9에서 테스트를 중단하고 추적하기가 매우 어려웠습니다. 난 그냥 설치 : instance_eval 내부보다는 클래스 수준에서 activate_authlogic 할거야. – adamlamar

0

Here는 AuthLogic 시험 문서에 대한 링크입니다. 중요한 하나이지만 조금 묻혀 있습니다 (Simone이 게시 한 동일한 링크이지만 더 이상 작동하지 않습니다).

이 페이지에는 인증을 위해 AuthLogic을 사용하여 응용 프로그램을 테스트하는 데 필요한 모든 정보가 있습니다.

또한 railsninja가 제안 했으므로 공장이 아닌 조명을 사용하십시오. 보십시오 factory_girlmachinist를보십시오; 너의 독약을 골라, 그들은 모두 좋다.