Функциональное тестирование Ruby on Rails с плагином RESTful Authentication - PullRequest
8 голосов
/ 15 мая 2009

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

Спасибо!

1 Ответ

7 голосов
/ 16 мая 2009

Подделка вполне приемлема.

Однако, напишите другие тесты, которые гарантируют, что вещи, которые вы хотите защитить, защищены Так

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

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

...