Rspec和reset_session不能一起工作

时间:2014-01-03 21:25:38

标签: ruby-on-rails ruby session rspec

我在一次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检测到会话添加密钥没有任何问题,但看不到某事被删除。想法?

2 个答案:

答案 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