Как написать rspec для частного метода в контроллере с параметрами - PullRequest
3 голосов
/ 30 сентября 2011

У меня есть контроллер

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 Ответ

2 голосов
/ 30 сентября 2011

Вы не должны тестировать приватные методы контроллера напрямую.Вместо этого протестируйте действие контроллера, которое использует этот метод.

Не забывайте о метафоре черного ящика в отношении ваших контроллеров.

Black Box testing diagram

Если вы тестируете приватные методы, вам придется переписывать тесты, когда вы хотите изменить только реализацию, а не интерфейс.Тесты черного ящика помогут вам убедиться, что вы не нарушили функциональность вашего контроллера, без непосредственного тестирования закрытых методов.

...