Нам нужно протестировать методы управления доступом приложения, чтобы убедиться, что только пользователи с правильными ролями могут выполнять определенные операции. Мы определяем роль пользователя, просматривая сеанс, чтобы увидеть, кто вошел в систему.
Наши тесты пытаются изменить роль пользователя и убедиться, что действия, которые должны быть запрещены для этой роли, по сути запрещено. Однако тесты не работают, потому что в текущих версиях 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 локальная переменная или метод сеанса для