rspec devise

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:

https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-(and-rspec)

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?



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.