Разработка: «remember_me» работает в процессе разработки, но не в тестовой среде

#ruby-on-rails #rspec #devise

#ruby-на-рельсах #rspec #придумать

Вопрос:

Я использую Devise для аутентификации с помощью запроса JSON. Это работает, за исключением remember_me тестирования функций rspec, однако оно работает при использовании 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. Что такое версии gem? Я не вижу подобных проблем в Google

2. Спасибо за вашу заботу, я проверил это и не нашел ничего плохого. Однако я обнаружил, что файл cookie подписан, поэтому не включен в response.cookies

Ответ №1:

remember_me хранится в подписанном файле cookie, поэтому недоступен в response.cookies

Чтобы исправить, вы должны заменить последнюю строку теста на:

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

Комментарии:

1. Или используйте незашифрованные файлы cookie в тесте.