如何使用参数为控制器中的私有方法编写rspec

vin*_*ini 5 methods rspec private ruby-on-rails

我有控制器

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
Run Code Online (Sandbox Code Playgroud)

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

@controller = ApplicationController.new
@controller.send(:handle_login_sequence)
Run Code Online (Sandbox Code Playgroud)

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

params[:userName], params[:password], params[:locale], params[:remember] 
Run Code Online (Sandbox Code Playgroud)

iaf*_*nov 1

您不应该直接测试控制器的私有方法。相反,测试使用此方法的控制器操作。

不要忘记与控制器有关的黑匣子隐喻。

黑盒测试图

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