11

我正在尝试检查管理员是否在 Rspec 测试中退出。但是通常的签到?方法无法从 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

是否有另一种方法来检查管理员的会话并查看他是否实际登录?

4

4 回答 4

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

可在https://github.com/plataformatec/devise/wiki/How-To:-Controllers-and-Views-tests-with-Rails-3-%28and-rspec%29找到

于 2013-04-03T11:27:52.820 回答
8

我认为这确实是您需要的如何:使用 Rails 3 和 4(以及 RSpec)测试控制器

只是检查current_user。它应该是nil

添加。好的做法是使用这样的语法

-> { sign_out @admin }.should change { current_user }.from(@admin).to(nil)
于 2012-06-22T15:41:12.987 回答
7

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

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

    expect { ... }.to change { controller.current_user }.to nil
    
  • 要检查特定用户,比如由 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
    
于 2013-12-05T19:39:17.363 回答
0
它“登录和注销用户”做
  用户 = User.create!(电子邮件:“user@example.org”,密码:“非常机密”)
  登录用户
  期望(controller.current_user).to eq(用户)

  注销用户
  期望(controller.current_user).to be_nil
结尾

您可以参考此链接设计规范助手链接

于 2018-01-10T09:06:36.703 回答