Вопрос

Я работаю над веб-приложением Rails 3 на данный момент с RSPEC 2, и мы используем разработку для аутентификации. Один (и в ближайшее время) наших контроллеров требует, чтобы пользователь был вошел в систему. Я знаю, что придумывает sign_in Тестируйте помощник, но можно использовать с объектом RSPEC или Mocha Mock?

Я изначально попробовал @user = mock_model(User) Где пользователь является разрабатывающим классом. Это не будет работать с sign_in :user, @user в виде get 'index' перенаправляется на знак в форме.

У кого-нибудь есть какие-либо опыт тестирования с разработкой и может помочь?

Это было полезно?

Решение

У нас была похожая проблема, но с использованием фабричной девушки. Мы решили это так:

В SPEC_HELPER.RB:

config.include Devise::TestHelpers, :type => :controller

В спецификации контроллера (просто метод обертки):

def login_user(user)
    sign_in user
end

Затем в каждом методе вам требуется, вы можете сделать:

login_user(Factory(:user))

... где вы определили объект пользователя на факториях. Не уверен, что это будет работать с макетами, хотя.

Другие советы

Макет никогда не собирается работать. Когда вы говорите вход, пользователь хранится в сеансе (в основном, класс пользователя и его идентификатор). Когда вы получите доступ к контроллеру, другой пользовательский объект извлекается на основе сохраненных данных. Лучший способ решить проблему использует что-то, что сохраняет объект, как заводская девушка.

Я ударил ту же проблему. Я делаю следующее сейчас:

before(:each) do
  # sign_in mock_user
  request.env['warden'] = mock(Warden, :authenticate => mock_user,
                                       :authenticate! => mock_user)
end

Я создал проблему для этого здесь: https://github.com/plataformatec/devise/issues.3928.Голосуйте!

Никто из них не работал для меня (MRI 1.9.3-Preview1, Rails 3.0.1.rc5).

Это решение, которое я нашел: http://blog.joshmcarthur.com/post/6407481655/integration-tests-with-devise-and-rspec.

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