2011-03-12 2 views
0

컨트롤러의 before_filter는 사용자가 로그인 할 것으로 예상합니다. 컨트롤러의 테스트가 실패하는 이유입니다 (before_filter에서 사용자 인증 호출을 제거하면 올바르게 작동합니다). 테스트하는 동안 사용자 인증 호출을 비활성화 할 수 있습니까?레일 컨트롤러 테스트 : 테스트하는 동안 컨트롤러의 before_filter를 비활성화하는 방법은 무엇입니까?

class Company::BranchController < ApplicationController 
    before_filter **:require_user**, :only => [:show, :edit, :update, :new, :create, :index] 

    def create 
    @branch = Company::Branch.new(params[:branch]) 
    if @branch.save 
     redirect_to :action => :index    
    else 
     render :action => :new  
    end 
    end 
end 

답변

1

필터 전에 비활성화하지 않아야합니다.

before(:each) do 
    @current_user = Factory.create(:user) 
    controller.stubs(:current_user).returns(@current_user) 
end 
+0

이 코드를 어디에 넣어야합니까? –

+0

rspec을 사용하지 않고 있는데, rspec에서만 언급 한 구문입니다. rspec없이 스텁을 사용하는 방법이있다. –

2

@Antiarchitect은, 그러나, 문제의 맥락 주어진, 난 당신이 방법을 스텁 대에 서명 한 사용자를 가지고 시뮬레이션을 고려해야 올바른 생각한다 : 나는 당신이 단지 시험 방법으로 로그인해야한다고 생각 확인.

사용자/로그인 패키지를 사용하여이를 수행 할 수있는 방법이 있습니다. Devise의 경우 간단한 sign_in @user 메서드를 제공합니다. Authlogic을 사용하면 UserSession.create @user을 할 수 있습니다. IMHO, 나는 당신의 테스트가 덜 부서지기 쉽고, 후자의 방식으로 그것을 수행함으로써 구현에 덜 묶일 것이라고 생각한다.