【问题标题】:how to write rspec for private method in controller with params如何使用参数在控制器中为私有方法编写 rspec
【发布时间】:2011-11-28 06:37:25
【问题描述】:

我有控制器

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] 

【问题讨论】:

  • 到目前为止,您的规范是什么样的?
  • 你有一个 nil 对象,你没想到它!您可能期望 ActiveRecord::Base 的实例。评估 nil 时发生错误。[] (我给了 put inside 打印的方法)

标签: ruby-on-rails methods rspec private


【解决方案1】:

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

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

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

【讨论】:

  • 从您的帖子中,我理解为不必担心输入仅访问该方法。这样对吗。如果我在不发送显示以下错误的参数的情况下调用该方法,当您没想到时,您有一个 nil 对象!您可能期望 ActiveRecord::Base 的实例。评估 nil 时发生错误。[]
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2015-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多