Stubbing Warden на контроллерах - PullRequest
       57

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

4 голосов
/ 13 февраля 2012

У меня проблема с тестированием моих контроллеров и использованием 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

Любая помощь будет отличной!

Ответы [ 2 ]

4 голосов
/ 22 июня 2012

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

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

1 голос
/ 14 февраля 2012

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

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

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

Так что, когда заглушите request.env в RSpec, ваша реализация должна указывать на request.env.

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

...