как написать rspec для частного метода в контроллере с параметрами

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

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] 

person vinothini    schedule 30.09.2011    source источник
comment
Как выглядит ваша спецификация на данный момент?   -  person Jordan Running    schedule 30.09.2011
comment
У вас есть нулевой объект, когда вы этого не ожидали! Вы могли ожидать экземпляр ActiveRecord::Base. Произошла ошибка при оценке nil.[] (я указал метод put внутри, который был напечатан)   -  person vinothini    schedule 30.09.2011


Ответы (1)


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

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

Схема тестирования черного ящика

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

person iafonov    schedule 30.09.2011
comment
Из вашего поста я понял, что не беспокойтесь о входном доступе только к методу. Это правильно. Если я вызываю метод без отправки параметров, которые показывают следующую ошибку У вас есть нулевой объект, когда вы этого не ожидали! Вы могли ожидать экземпляр ActiveRecord::Base. Произошла ошибка при оценке nil.[] - person vinothini; 30.09.2011