@user = FactoryGirl.create(:user)
@user2 = FactoryGirl.create(:user)
@request.env["devise.mapping"] = Devise.mappings[:user]
controller.current_user.should be_nil
post :create, :user => {email: @user.email, password: @user.test_pass}
flash[:alert].should be_nil
controller.should(respond_to(:current_user))
controller.current_user.should_not be_nil
post :create, :user => {email: @user2.email, password: @user2.test_pass}
flash[:alert].should be_nil
controller.should(respond_to(:current_user))
controller.current_user.should == @user2
最后一个失败了。它仍然是@user,而不是@ user2。
修改
如果我这样做,这是一种公平的方式来注销用户并清除会话吗?
class SessionsController < Devise::SessionsController
def create
if warden.authenticated?(:user)
sign_out(current_user)
end
super
end
end
答案 0 :(得分:1)
设计验证流程非常合乎逻辑,一旦您登录/注册,您将被重定向,并且您的会话将被启动和捕获,您需要在新会话开始之前签署。
现在我看到你正在测试默认设计行为,要求它在创建第二个用户时注销第一个用户?好的设计不会这样做,但如果您的应用程序需要这样做,为什么不使用before_create回调方法呢?
我想这就是Red,Green,Refactor的全部想法。