2011-03-12 238 views
0

控制器的before_filter期望用戶登錄。這就是爲什麼控制器的測試失敗(如果我從before_filter中刪除用戶身份驗證調用,就工作正常)。測試時是否可以禁用用戶驗證呼叫?Rails控制器測試:如何在測試時禁用控制器的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

我應該在哪裏放這個代碼? – 2011-03-12 11:44:44

+0

我沒有使用rspec,所提到的語法是rspec特定的。有沒有方法來使用存根沒有rspec。 – 2011-03-12 21:31:37

2

@Antiarchitect是否正確,但是,考慮你的問題的情況下,我想你應該考慮模擬具有與簽字用戶刪空的方法檢查。

有辦法做到這一點與用戶/登錄包在那裏。對於Devise,它提供了一個簡單的sign_in @user方法;用Authlogic,你可以做UserSession.create @user。恕我直言,我認爲你的測試將會不那麼脆弱,並且通過後一種方式進行實施會更少。