Stubbing Warden на тестах контроллера

У меня проблема с тестированием моих контроллеров и использованием Warden.

Все примеры указывают на заглушку request.env['warden']. Это вызывает проблемы в моих контроллерах, когда я вызываю env['warden'], который затем возвращает nil.

Для грубого примера, используя это:

request.env['warden'] = double(Warden, :authenticate => nil,
                                          :authenticate! => nil,
                                          :authenticated? => false)

И простой перед фильтром, как это:

before_filter do
  redirect_to new_user_session_url unless env['warden'].authenticated?
end

Я получаю nil.

Мне только что удалось заставить его работать с помощью controller.env['warden'] = ..., и он работает. Это имеет смысл, поскольку он находится прямо на уровне контроллера, поэтому я думаю, что мой вопрос в том, что не будет работать в тех примерах, которые я видел во всех примерах.

У меня есть это в моем spec_helper:

config.include Warden::Test::Helpers

Любая помощь будет здорово!


person stuartc    schedule 13.02.2012    source источник


Ответы (2)


Я написал помощники по тестированию контроллеров для Warden.

http://kentaroimai.com/articles/1-controller-test-helpers-for-warden

person Kentaro Imai    schedule 22.06.2012
comment
Я могу убедиться, что это работает очень хорошо. Вот как это применить к RSpec: stackoverflow.com/a/13422870/175981 - person Chris Peters; 16.11.2012
comment
Ссылка на данный момент не работает :( - person Intentss; 01.04.2017
comment
@Intentss Не могли бы вы посетить следующую информацию, пока я не исправлю свой веб-сайт? gist.github.com/kentaroi/f210f45652ca1562c27ebdd945df5f14 - person Kentaro Imai; 01.04.2017

Несмотря на множество примеров, говорящих вам реализовать Warden через env['warden'] в вашем приложении Rails. Кажется, правильный способ получить к нему доступ через request.env['warden'].

Он обнаружил это, подняв env в моих контроллерах во время тестов, и это всегда выходило nil.

Кажется, в Warden, https://github.com/hassox/warden/blob/master/lib/warden/proxy.rb#L13 Существует аксессор для среды стойки, которого не будет в тестовом режиме из-за отсутствия стойки в тестах контроллера. Пожалуйста, проверьте это.

Поэтому при заглушке request.env в RSpec ваша реализация должна указывать на request.env.

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

person stuartc    schedule 14.02.2012