Макеты не работают с rspec и degis
-
26-09-2019 - |
Вопрос
Я работаю над веб-приложением 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.