Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Check if a user is signed out in devise

I'm trying to check if an administrator is signed out in an Rspec test. However the usual signed_in? method can't be seen from rspec and isn't part of the RSpec Devise Helpers.

Something like this is what i have in place

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

Is there anothe way to check the session of the administrator and see if he's actually signed in or not?

like image 699
Overtone Avatar asked Jun 22 '12 15:06

Overtone


3 Answers

Not a new answer, really, but my rep isn't high enough to comment...:

  • If you've already overridden subject, the controller is available as controller in controller specs, so:

    expect { ... }.to change { controller.current_user }.to nil
    
  • To check for a specific user, say generated by FactoryGirl, we've had good success with:

    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
    
like image 93
cobbr2 Avatar answered Oct 14 '22 15:10

cobbr2


it "should have a current_user" do
  subject.current_user.should_not be_nil
end

Found at https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-%28and-rspec%29

like image 22
everyman Avatar answered Oct 14 '22 14:10

everyman


I think it's really what you need How To: Test controllers with Rails 3 and 4 (and RSpec)

Just check current_user. It should be nil

Add. Good practice is using syntax like this

-> { sign_out @admin }.should change { current_user }.from(@admin).to(nil)
like image 32
caulfield Avatar answered Oct 14 '22 14:10

caulfield