我有控制器
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]
答案 0 :(得分:2)
您不应直接测试控制器的私有方法。而是测试使用此方法的控制器操作。
不要忘记关于控制器的黑盒子比喻。
如果您测试私有方法,那么当您只想更改实现而不是接口时,您将不得不重写测试。黑盒测试将帮助您确保在未直接测试私有方法的情况下未破坏控制器功能。