Моты не работают с RSpec и Devise - PullRequest
3 голосов
/ 20 ноября 2010

Сейчас я работаю над веб-приложением Rails 3 с RSpec 2, и мы используем Devise для аутентификации.Один (и вскоре многие) наши контроллеры требуют, чтобы пользователь вошел в систему. Я знаю, что Devise предоставляет sign_in помощник по тестированию, но можно ли его использовать с фиктивным объектом RSpec или Mocha?@user = mock_model(User) где пользователь - класс Devise.Это не будет работать с sign_in :user, @user, так как get 'index' будет перенаправлять на форму входа.

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

Ответы [ 5 ]

5 голосов
/ 19 января 2011

У нас была похожая проблема, но с использованием Factory Girl. Мы решили это так:

В spec_helper.rb:

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

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

def login_user(user)
    sign_in user
end

Затем в каждом необходимом вам методе вы можете сделать:

login_user(Factory(:user))

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

2 голосов
/ 17 марта 2011

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

1 голос
/ 15 января 2011

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

before(:each) do
  # sign_in mock_user
  request.env['warden'] = mock(Warden, :authenticate => mock_user,
                                       :authenticate! => mock_user)
end
0 голосов
/ 18 августа 2011

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

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

0 голосов
/ 17 марта 2011

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

...