2012-03-06 8 views
17

Sto migrando i miei test di unità Rails standard a RSpec e ho problemi con l'ideazione. Tutti i controller contenenti l'autenticazione di elaborazione non funzionano con RSpec.RSpec e escogitare: non può sign_in admin

cerco di sign_in un admin in RSpec seguendo il tutorial di concepire, ma senza successo:

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

Ecco quello che ho provato:

/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 

Il mio modello non è confermabile, tutto il mio controllo spec stanno fallendo.

Se rimuovo before_filter: authenticate_admin! poi passano tutti i miei test.

Qualcuno può aiutare?

risposta

21

Probabile causa: Assicurarsi di non impostare la sessione esplicitamente nelle specifiche del controller.

Ad esempio, se si utilizza il generatore di scaffold Rspec predefinito, le specifiche del controllore generate passano lungo i parametri di sessione.

get :index, {}, valid_session 

Queste stanno sovrascrivendo le variabili di sessione che gli helper di Devise hanno impostato per accedere con Warden. La soluzione più semplice è quella di rimuoverli:

get :index, {} 

In alternativa, è possibile impostare le informazioni di sessione Warden in manualmente, invece di usare aiutanti di escogitare.

+0

Grazie che è stato! – vdaubry

+0

Inoltre, se l'amministratore è annidato nella fabbrica utente, è necessario chiamarlo in questo modo: 'sign_in: user, @ admin', che significa' sign_in (scope, resource) ' – Arel

3

Hai detto "Il mio modello non è confermabile", quindi il seguente non si applica a te, ma qui c'è una sottigliezza che gli altri potrebbero perdere, come ho fatto io (e ho perso un'ora).

Nota nel RSpec/Devise How-To che vdaubry cita sopra, si dice che se si ha il modulo Devise "confermabile" abilitata nel modello, allora o è necessario chiamare @admin.confirm! destra prima sign_in @admin, oppure assicurarsi la tua fabbrica imposta un confirmed_at quando crea il tuo @admin. Se non lo fai, la chiamata sign_in fallirà silenziosamente e tutte le specifiche successive si comporterà come se non avessi effettuato il login.

Problemi correlati