4
我在铁路应用程序中使用Devise。用户和管理员登出设计并通过RSPEC进行测试
我有两种模式:用户和管理员。
目前,我可以,如果我访问的用户登录,并在管理标志登录既是用户和管理员。
我想迫使一个的退出,如果在其他标志。什么是最好的方法来做到这一点?
此外,如果有人有一个很好的方法来测试rspec /水豚,请分享!
感谢
我在铁路应用程序中使用Devise。用户和管理员登出设计并通过RSPEC进行测试
我有两种模式:用户和管理员。
目前,我可以,如果我访问的用户登录,并在管理标志登录既是用户和管理员。
我想迫使一个的退出,如果在其他标志。什么是最好的方法来做到这一点?
此外,如果有人有一个很好的方法来测试rspec /水豚,请分享!
感谢
我会复制在设计控制器和滤波器之前增加一个像这样:
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
我认为这会工作。你如何在水豚中测试这样的东西?有没有特定的帮手? – jignesh 2012-02-29 08:36:10
啊,很好的问题,据我所知你不能从请求规范访问current_user(这可能不是最好的做法),是否有一部分你的应用程序的视图是不同的,当用户登录vs管理员,还是某种形式的flash [:notice]来帮助区分? – 2012-02-29 08:40:20
所以对于上面的示例代码,我无法做到subject.current_user然后,正确?我正在考虑使用flash [:notice]通知用户/管理员他们已经注销,并且新用户/管理员已经登录。我可以在capybara中捕获该用户/管理员。 – jignesh 2012-02-29 08:47:32