как да напиша 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. Грешката възникна при оценяването на нула.[] (дадох put put в метода, който беше отпечатан)   -  person vinothini    schedule 30.09.2011


Отговори (1)


Не трябва да тествате директно частни методи на контролер. Вместо това тествайте действието на контролера, което използва този метод.

Не забравяйте за метафората на черната кутия по отношение на вашите контролери.

Диаграма за тестване на черна кутия

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

person iafonov    schedule 30.09.2011
comment
От публикацията ви разбрах, че не се притеснявайте за входния достъп само до метода. Правилно ли е. Ако извикам метода, без да изпращам параметри, това показва следната грешка. Имате нулев обект, когато не сте го очаквали! Може би сте очаквали екземпляр на ActiveRecord::Base. Грешката възникна при оценяването на нула.[] - person vinothini; 30.09.2011