2012-02-29 65 views
4

我在铁路应用程序中使用Devise。用户和管理员登出设计并通过RSPEC进行测试

我有两种模式:用户和管理员。

目前,我可以,如果我访问的用户登录,并在管理标志登录既是用户和管理员。

我想迫使一个的退出,如果在其他标志。什么是最好的方法来做到这一点?

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

感谢

回答

5

我会复制在设计控制器和滤波器之前增加一个像这样:

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 

然后进行测试,你可以在功能(控制器)访问当前用户的规格致电主题.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 => "[email protected]", :password => "secret"} } 
     subject.current_user.should_not be_nil 
     subject.current_admin.should be_nil 
    end 
    end 
end 
+0

我认为这会工作。你如何在水豚中测试这样的东西?有没有特定的帮手? – jignesh 2012-02-29 08:36:10

+0

啊,很好的问题,据我所知你不能从请求规范访问current_user(这可能不是最好的做法),是否有一部分你的应用程序的视图是不同的,当用户登录vs管理员,还是某种形式的flash [:notice]来帮助区分? – 2012-02-29 08:40:20

+0

所以对于上面的示例代码,我无法做到subject.current_user然后,正确?我正在考虑使用flash [:notice]通知用户/管理员他们已经注销,并且新用户/管理员已经登录。我可以在capybara中捕获该用户/管理员。 – jignesh 2012-02-29 08:47:32

相关问题