【问题标题】:Rails controller testing: How to disable before_filter of controller while testing?Rails 控制器测试:如何在测试时禁用控制器的 before_filter?
【发布时间】:2011-03-12 05:50:09
【问题描述】:

控制器的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

【问题讨论】:

    标签: ruby-on-rails ruby testing controller before-filter


    【解决方案1】:

    @Antiarchitect 是正确的,但是,鉴于您的问题的上下文,我认为您应该考虑模拟让用户登录与取消方法检查。

    有一些方法可以使用用户/登录包来做到这一点。对于 Devise,它提供了一个简单的sign_in @user 方法;使用 Authlogic,您可以执行 UserSession.create @user。恕我直言,我认为通过后一种方式进行测试,您的测试将不那么脆弱,并且与实施的联系更少。

    【讨论】:

      【解决方案2】:

      可能您不应该在过滤器之前禁用。我认为您应该以测试方式登录:

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

      【讨论】:

      • 我没有使用 rspec,你提到的语法是 rspec 特定的。有没有办法在没有 rspec 的情况下使用存根。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多