2012-06-22 14 views
10

Estoy tratando de verificar si un administrador está desconectado en una prueba Rspec. Sin embargo, el usual signed_in? El método no se puede ver desde rspec y no es parte de RSpec Devise Helpers.Compruebe si un usuario está desconectado en el dispositivo

Algo como esto es lo que tengo en el lugar

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 

¿Hay anothe manera de comprobar la sesión del administrador y ver si en realidad está firmado o no?

Respuesta

8

creo que es realmente lo que necesita How To: Test controllers with Rails 3 and 4 (and RSpec)

Sólo echa current_user. Debe ser nil

Agregar. La buena práctica está utilizando una sintaxis como esta

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

hecho. Acababa de encontrar subject.current_administrator.should be_nil en algún viejo código ruby. No tenía idea del tema antes de eso. Gracias. – Overtone

+0

En mi caso para su ejemplo, ¿no sería current_administrator ya que el administrador es el modelo utilizado y no el usuario? – Overtone

+0

'current_user' es idear helper. se refiere al usuario firmado en la sesión actual, porque no se puede iniciar sesión dos veces al mismo tiempo – caulfield

4

No es una nueva respuesta, de verdad, pero mi representante no es lo suficientemente alta como para comentar ...:

  • Si ya ha reemplazado subject, el controlador está disponible como controller en las especificaciones del controlador, por lo que:

    expect { ... }.to change { controller.current_user }.to nil 
    
  • para comprobar si hay un usuario específico, digamos generados por factorygirl, hemos tenido buen éxito 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 

Puede consultar este enlace devise spec helper link

Cuestiones relacionadas