Функциональное тестирование Ruby on Rails с плагином RESTful Authentication
-
22-08-2019 - |
Вопрос
Сегодня я начал писать функциональные тесты для своего приложения Rails.Я использую плагин аутентификации RESTful.Я столкнулся с парой запутанных вещей, надеюсь, кто-нибудь сможет мне прояснить.
1) Я написал функцию быстрого входа в систему, поскольку большинство функций моего приложения Rails требуют аутентификации.
def login_as(user)
@request.session[:user_id] = user ? user.id : nil
end
Проблема, которую я вижу в этой функции, заключается в том, что она по сути подделывает аутентификацию.Стоит ли мне беспокоиться об этом?Возможно, можно пойти по этому пути, если я где-нибудь протестирую настоящий метод аутентификации.Или, может быть, это ужасная практика.
2) Вторая смущающая вещь заключается в том, что в некоторых местах моих функциональных тестов мне нужно, чтобы произошел полный процесс аутентификации.Когда пользователь активирован, у меня есть метод do_activate, который создает для пользователя некоторые начальные объекты.Это аналогично созданию пустого объекта блокнота и объекта ручки для студенческого приложения, если это имеет смысл.
Поэтому, чтобы правильно протестировать мое приложение, мне нужно, чтобы пользователь достиг этого состояния активации, чтобы эти объекты были созданы.В настоящее время я использую Factory Girl для создания пользователя, а затем вызываю функцию login_as, указанную выше, для подделки аутентификации.
Я думаю, другой вариант — пропустить полную последовательность аутентификации и просто создать пустые объекты с помощью Factory Girl.Я мог бы проверить правильную аутентификацию где-нибудь еще.
Что вы думаете?Если мне нужно выполнить правильную последовательность действий, почему приведенный ниже код не вызывает функцию do_activate?
user = Factory.create(:user)
user.active = 1
user.save
Спасибо!
Решение
Подделка вполне приемлема.
Однако напишите другие тесты, которые гарантируют, что то, что вы хотите защитить, защищено.Так
test "it should show the profile page" do
user = Factory(:user)
login_as(user)
get :show, :id => user
assert_response :success
end
test "it should not show the profile page cos I'm not logged in" do
user = Factory(:user)
get :show, :id => user
assert_response :redirect
end
Не стесняйтесь связаться со мной для продолжения!