检查用户是否已在设计中注销

Ove*_*one 10 ruby authentication rspec ruby-on-rails devise

我正在尝试检查管理员是否在Rspec测试中注销.但通常的signed_in?方法不能从rspec中看出,也不是RSpec Devise Helpers的一部分.

这样的事情就是我所拥有的

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
Run Code Online (Sandbox Code Playgroud)

有没有办法检查管理员的会话,看看他是否真的登录?

cau*_*eld 8

我认为这真的是你需要的如何:使用Rails 3和4(以及RS​​pec)测试控制器

检查一下current_user.它应该是nil

加.好的做法是使用这样的语法

-> { sign_out @admin }.should change { current_user }.from(@admin).to(nil)
Run Code Online (Sandbox Code Playgroud)

  • 这只测试设计测试辅助方法sign_in和sign_out.如果我想测试网站中的某些内容是否实际登录用户或签署用户该怎么办?如果我创建一个带有Factory的用户,然后使用Capabara功能登录用户,则current_user var不可用.有什么想法吗? (3认同)

小智 6

真的不是新答案,但我的代表不够高,无法发表评论......:

  • 如果您已经覆盖subject,则控制器controller在控制器规范中可用,因此:

    expect { ... }.to change { controller.current_user }.to nil
    
    Run Code Online (Sandbox Code Playgroud)
  • 要检查特定用户,例如由 FactoryGirl 生成的用户,我们在以下方面取得了成功:

    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
    
    Run Code Online (Sandbox Code Playgroud)