如何用params在控制器中为私有方法编写rspec

时间:2011-09-30 07:46:23

标签: ruby-on-rails methods rspec private

我有控制器

class ApplicationController < ActionController::Base
  def index
  end

  private

    def handle_login_sequence
      username = params[:userName]
      password = params[:password]

      cookies[:locale]  = params[:locale]
      remember          = params[:remember]

      username_locked   = User.locked_username?(username)
      user = User.authenticate(username, password)

      if user && user.has_portal_access?
        case user.account_status
          when AccountStatus::Active
            flash[:error] =  'login'
        end
      end
    end

end

我想为这个私有方法编写Rspec

@controller = ApplicationController.new
@controller.send(:handle_login_sequence)

通过上面的代码,我可以调用handle_login_sequence方法,但我不知道如何传递以下内容:

params[:userName], params[:password], params[:locale], params[:remember] 

1 个答案:

答案 0 :(得分:2)

您不应直接测试控制器的私有方法。而是测试使用此方法的控制器操作。

不要忘记关于控制器的黑盒子比喻。

Black Box testing diagram

如果您测试私有方法,那么当您只想更改实现而不是接口时,您将不得不重写测试。黑盒测试将帮助您确保在未直接测试私有方法的情况下未破坏控制器功能。