2011-03-12 236 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。恕我直言,我认为你的测试将会不那么脆弱,并且通过后一种方式进行实施会更少。