8

오늘 필자는 레일 애플리케이션의 기능 테스트를 시작했다. 나는 RESTful 인증 플러그 인을 사용한다. 나는 누군가 나를 혼란스럽게 할 수 있기를 바란다.RESTful 인증 플러그인을 사용한 Ruby on Rails 기능 테스트

1) 필자의 레일 앱에있는 대부분의 기능이 인증을 필요로하기 때문에 빠른 로그인 기능을 작성했습니다.

def login_as(user) 
    @request.session[:user_id] = user ? user.id : nil 
end 

이 기능에서 볼 수있는 문제점은 기본적으로 가짜 인증입니다. 나는 이것에 대해 걱정해야합니까? 진정한 인증 방법을 어딘가에서 테스트하는 한이 경로를 사용하는 것이 좋습니다. 아니면 끔찍한 연습 일 수도 있습니다.

2) 두 번째 혼란스러운 점은 기능 테스트의 일부 장소에서 전체 인증 프로세스가 필요하다는 것입니다. 사용자가 활성화되면 do_activate 메소드에서 사용자에 대한 초기 객체를 만듭니다. 그것이 의미가있는 경우 학생용 애플리케이션을위한 빈 노트북 객체 및 펜 객체의 생성과 유사합니다.

그래서 내 응용 프로그램을 제대로 테스트하려면 사용자가 해당 활성화 상태를 눌러 해당 객체가 만들어 지도록해야합니다. 나는 Factory Girl을 사용하여 사용자를 생성 한 다음 위에서 위의 login_as 함수를 호출하여 인증을 위조합니다.

다른 옵션은 전체 인증 시퀀스를 건너 뛰고 공장 소녀와 함께 빈 개체를 만드는 것입니다. 나는 다른 곳에서 적절한 인증을 테스트 할 수 있었다.

당신은 어떻게 생각하십니까? 적절한 순서를 거쳐야한다면 아래의 코드가 do_activate 함수를 호출하지 않는 이유는 무엇입니까?

user = Factory.create(:user) 
user.active = 1 
user.save 

고마워요!

+0

[여기에 내가 묻는 유사한 질문입니다] (http://stackoverflow.com/questions/64827/rails-restful-authentication-rspec-how-to-test-new-models-that-require-authen) 및 내가 뽑은 많은 링크들. – srboisvert

답변

7

위조하는 것은 완벽하게 허용됩니다.

그러나 보호하려는 사항이 보호되는지 확인하는 다른 테스트를 작성하십시오. 따라서

test "it should show the profile page" do 
    user = Factory(:user) 
    login_as(user) 
    get :show, :id => user 
    assert_response :success 
end 

test "it should not show the profile page cos I'm not logged in" do 
    user = Factory(:user) 
    get :show, :id => user 
    assert_response :redirect 
end 

감히 내 마음을 사로 잡을 수 있습니다!