2012-06-22 12 views
10

Sto provando a verificare se un amministratore è disconnesso da un test Rspec. Comunque il solito signed_in? il metodo non può essere visto da rspec e non fa parte degli helper di RSpec Devise.Verificare se un utente è disconnesso in progettazione

Qualcosa di simile a questo è quello che ho in luogo

before (:each) do 
     @admin = FactoryGirl.create(:administrator) 
     sign_in @admin 
     end 


     it "should allow the admin to sign out" do 
     sign_out @admin 
     #@admin.should be_nil 
     #@admin.signed_in?.should be_false 
     administrator_signed_in?.should be_false 
     end 

C'è anothe modo per controllare la sessione dell'amministratore e vedere se è realmente firmato o no?

risposta

8

penso che sia davvero quello che serve How To: Test controllers with Rails 3 and 4 (and RSpec)

Basta controllare current_user. Dovrebbe essere nil

Aggiungi. La buona pratica sta usando la sintassi come questo

-> { sign_out @admin }.should change { current_user }.from(@admin).to(nil) 
+1

davvero. Avevo appena trovato subject.current_administrator.should be_nil in qualche vecchio codice ruby. Non avevo idea di soggetto prima di quello. Grazie. – Overtone

+0

Nel mio caso per l'esempio, non sarebbe current_administrator come amministratore è il modello utilizzato e non utente? – Overtone

+0

'current_user' è l'assistente di sviluppo. si riferisce all'utente firmato nella sessione corrente, perché non è possibile accedere due volte allo stesso tempo – caulfield

4

Non una nuova risposta, in realtà, ma il mio rappresentante non è abbastanza alta per commentare ...:

  • Se hai già sostituito subject, il controller è disponibile come controller nelle specifiche del controller, quindi:

    expect { ... }.to change { controller.current_user }.to nil 
    
  • Per verificare la presenza di un utente specifico, diciamo generati da factorygirl, abbiamo avuto un buon successo con:

    let(:user) do FactoryGirl.create(:client) ; end 
    ... 
    it 'signs them in' do 
        expect { whatever }.to change { controller.current_user }.to user 
    end 
    
    it 'signs them out' do 
        expect { whatever }.to change { controller.current_user }.to nil 
    end 
    
-1
 
it "signs user in and out" do 
    user = User.create!(email: "[email protected]", password: "very-secret") 
    sign_in user 
    expect(controller.current_user).to eq(user) 

    sign_out user 
    expect(controller.current_user).to be_nil 
end 

È possibile fare riferimento questo link devise spec helper link

Problemi correlati