我在一次rspec测试时遇到了一些麻烦。我正在编写简单的登录系统。一切正常,除了登出测试:
context 'when user is logged in' do
before(:each) do
session[:user_id] = User.first.id;
end
it 'allows user to log out' do
delete :destroy
session.should be_empty
end
end
销毁行动:
def destroy
reset_session
redirect_to new_session_path
end
我已经检查过,在reset_session
命令之后立即清除了测试会话,但在delete :destroy
之后没有在rspec中清除它。我想知道这两个会议是如何相关的。
我也尝试了session.delete(:user_id)
完全相同的结果。似乎rspec检测到会话添加密钥没有任何问题,但看不到某事被删除。想法?
答案 0 :(得分:1)
在我的测试中,reset_session
确实根据session
调用之前和之后的测试清除了RSpec所感知的delete :destroy
变量。我必须删除控制器中以下notice:
的{{1}},否则会在redirect
变量中填入通知信息。
如果您在重定向之前和之后尚未在控制器中打印出session
的值,我会这样做。
答案 1 :(得分:0)
试试这个测试:
it 'allows user to log out' do
delete :destroy
request.original_url.eq new_session_path
end
此链接可以为您提供帮助,get current url