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)
您不应该直接测试控制器的私有方法。相反,测试使用此方法的控制器操作。
不要忘记与控制器有关的黑匣子隐喻。

如果您测试私有方法,当您只想更改实现而不更改接口时,您将必须重写测试。黑盒测试将帮助您确保在不直接测试私有方法的情况下没有破坏控制器功能。
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |