В моем (Rails 3.2) Test :: Unit-контроллере / функциональных тестах assert_routing завершается с ошибкой:
1) Error:
test: with an admin user routing should route GET /admin/contracts to/from {:action=>"index", :controller=>"admin/contracts"}. (Admin::ContractsControllerTest):
NoMethodError: undefined method `authenticate!' for nil:NilClass
с маршрутом:
authenticate :admin do
namespace :admin do
resources :contracts
end
end
Я устанавливаюup Проверка подлинности Devise 2.0 в тестах моего контроллера:
admin = Factory.create(:admin)
admin.confirm!
@request.env["devise.mapping"] = Devise.mappings[:admin]
sign_in :admin, admin
Этот ответ Stubbing Warden при тестировании контроллера указывает, что стойка может проходить проверку подлинности даже до запуска моего приложения.Что странно, потому что мои тесты контроллера выполняются и уже должны были установить переменную env.Но в то время, когда аутентификация вызывается, request.env["warden"]
равен нулю.
Это тот случай, когда стойка работает до того, как помощник Devise установит переменную env?И если да, то как настроить аутентификацию до того, как стойка проверит мой файл маршрутизации?Мои другие утверждения проходят, но assert_routing представляется особым случаем.
edit:
Я проверил, что моя установка запущена до вызова #authenticate и Devise isдействительно, инициализируем request.env ['warden'] с помощью объекта Warden::Proxy
, но когда вызывается #authenticate, `request.env ['warden'] равен nil.Означает ли это, что стойка работает в отдельном потоке или что-то в этом роде?Так запутанно, я уверен, что делаю что-то не так.-_-