Функциональное тестирование Ruby on Rails с плагином RESTful Authentication

StackOverflow https://stackoverflow.com/questions/867231

Вопрос

Сегодня я начал писать функциональные тесты для своего приложения 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

Не стесняйтесь связаться со мной для продолжения!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top