RSpec y dispositivo: no se puede iniciar sesión en admin
devise (3)
Estoy migrando mis pruebas de unidades de Rails a RSpec y tengo problemas con el dispositivo. Todos los controladores que contienen la autenticación del dispositivo están fallando con RSpec.
Intento iniciar sesión en un administrador en RSpec siguiendo el tutorial del dispositivo, sin éxito:
Esto es lo que intenté:
/spec/controllers/ipad_tech_infos_controller_spec.rb
before :each do
@request.env["devise.mapping"] = Devise.mappings[:admin]
@admin = FactoryGirl.create :admin
sign_in @admin
end
/spec/support/devise.rb
RSpec.configure do |config|
config.include Devise::TestHelpers, :type => :controller
end
/spec/factories/admin.rb
FactoryGirl.define do
factory :admin do
email "[email protected]"
password "foobar"
password_confirmation {|u| u.password}
end
end
Mi modelo no es confirmable, todas las especificaciones de mi controlador están fallando.
Si elimino before_filter: authenticate_admin! entonces todas mis pruebas pasan.
¿Alguien puede ayudar?
No sé qué estaba causando esto, pero para mí la solución fue agregar el método:
def valid_session
{"warden.user.user.key" => session["warden.user.user.key"]}
end
Se encuentra aquí: rail3 / rspec / devise: falla la prueba del controlador rspec a menos que añada un dummy = subject.current_user.inspect
Usted dijo "Mi modelo no es confirmable", por lo que lo siguiente no se aplica a usted, pero aquí hay una sutileza que otros podrían perderse, como yo (y perdí una hora).
Tenga en cuenta que en el RSpec / Devise How-To que vdaubry menciona más arriba, dice que si tiene el módulo "Confirmable" de Devise habilitado en su modelo, entonces debe llamar a @admin.confirm!
justo antes de sign_in @admin
, o bien asegúrese de que su fábrica establezca un @admin
cuando cree su @admin
. Si no haces esto, la llamada sign_in
fallará silenciosamente y todas las especificaciones subsiguientes actuarán como si no hubieras iniciado sesión.
Responsable probable: asegúrese de que no está configurando la sesión explícitamente en las especificaciones de su controlador.
Por ejemplo, si está utilizando el generador de andamio Rspec predeterminado, las especificaciones del controlador generado pasan a lo largo de los parámetros de sesión.
get :index, {}, valid_session
Estas son sobreescribir las variables de sesión que los ayudantes de Devise configuraron para iniciar sesión con Warden. La solución más sencilla es eliminarlos:
get :index, {}
Alternativamente, puede configurar la información de la sesión de Warden en ellos manualmente, en lugar de usar los ayudantes de Devise.