Как проверить действия входа в систему с помощью теста RSpe c? - PullRequest
1 голос
/ 17 июня 2020

Нам нужно протестировать методы управления доступом приложения, чтобы убедиться, что только пользователи с правильными ролями могут выполнять определенные операции. Мы определяем роль пользователя, просматривая сеанс, чтобы увидеть, кто вошел в систему.

Наши тесты пытаются изменить роль пользователя и убедиться, что действия, которые должны быть запрещены для этой роли, по сути запрещено. Однако тесты не работают, потому что в текущих версиях Rails невозможно установить переменную сеанса в спецификациях функций.

Нам нужен способ заполнить переменную сеанса в тестах для наших методы авторизации работают по назначению, в противном случае мы могли бы использовать обходной путь. Как мы можем заполнить переменную сеанса или обойти ее, чтобы проверить авторизацию в нашем приложении?

Вот код в файле авторизации, проверяющий, если пользователь вошел в систему (который вызывается для нескольких действий в тестах):

  def user_logged_in?
    !session[:user].nil?
  end

И код в spec / rails_helper.rb , который пытается заполнить переменную сеанса, когда пользователя заглушают:

def stub_current_user(current_user, current_role_name = 'Student', current_role)
    allow_any_instance_of(ApplicationController).to receive(:current_user).and_return(current_user)
    allow_any_instance_of(ApplicationController).to receive(:current_role_name).and_return(current_role_name) 
    allow_any_instance_of(ApplicationController).to receive(:current_role).and_return(current_role)
    session[:user] = current_user
end

Что вызывает следующее возникшая ошибка:

undefined локальная переменная или метод сеанса для

...