用户和管理员使用设计注销并通过RSPEC进行测试

jig*_*esh 4 devise capybara rspec2 ruby-on-rails-3

我在铁路应用程序中使用Devise.

我有两个模型:用户和管理员.

目前,如果我访问用户登录和管理员登录,我可以同时以用户和管理员身份登录.

如果其他人签到,我想强制注销一个.最好的办法是什么?

此外,如果有人有一个很好的方法来测试rspec/capybara,请分享!

谢谢

Ale*_*ant 5

我会复制Devise控制器并添加一个之前的过滤器,如下所示:

class Users::SessionsController < Devise::SessionsController

  before_filter :logout_admin, :only => "create"

  def create
    super
  end

  private

  def logout_admin
    # change :admin to :user in the admin's session controller
    # the sign_out is a devise controller helper that forces sign out
    sign_out :admin
  end

end
Run Code Online (Sandbox Code Playgroud)

然后,对于测试,您可以通过调用subject.current_user或subject.current_admin访问功能(控制器)规范中的当前用户,请访问:https://github.com/plataformatec/devise以确保包含测试助手然后尝试这样的事情:

require 'spec_helper'

describe Users::SessionsController do
  login_admin

  describe "POST create" do
    it "should logout admin" do
      post :create, {:user => {:email => "tester@email.com", :password => "secret"} }
      subject.current_user.should_not be_nil
      subject.current_admin.should be_nil
    end
  end
end
Run Code Online (Sandbox Code Playgroud)