设计:“remember_me”适用于开发,但不适用于测试环境

时间:2014-06-21 13:37:03

标签: ruby-on-rails rspec devise

我正在通过JSON请求使用Devise进行身份验证。它在rspec特性测试中除了remember_me之外有效,但是在通过我的开发服务器使用curl时它可以工作。我肯定做错了什么,感谢任何帮助

功能规格:

it 'Log in with "remember_me"' do
  user = create :user
  params = {user: {email: user.email, password: 'debug', remember_me: '1'}}
  post '/api/v1/auth/sign_in', params, format: :json
  response.status.should eq(201) # created
  response.cookies.has_key?('_my_app_session').should eq(true)
  response.cookies.has_key?('remember_user_token').should eq(true)
end

expected: true got: false

的最后一行失败

命令行:

curl -v -H "Accept: application/json" -H "Content-type: application/json" \
  -X POST -d '{"user":{"email":"maeva_morel@deschamps.fr","password":"debug","remember_me":"1"}}' \
  http://localhost:3000/api/v1/auth/sign_in

这与输出

中的有效
Set-Cookie: remember_user_token=W1s3Nl0sIiQyYSQxMCRoOERF...

提前感谢您提供任何帮助

1 个答案:

答案 0 :(得分:2)

remember_me存储在已签名的Cookie中,因此在response.cookies

中无法使用

要解决此问题,您必须通过以下方式替换测试的最后一行:

@request.cookie_jar.has_key?('remember_user_token').should eq(true)