En l'état, le cookie signé et le cookie crypté ne sont pas accessibles dans la spécification de la demande. L'erreur suivante s'affiche.
NoMethodError:
undefined method `signed' for #<Rack::Test::CookieJar:0x00007fbc6751fa38>
Ceci est dû au fait que l'objet cookies utilisé dans la spécification de la requête est une instance de Rack :: Test :: CookieJar au lieu de ʻActionDispatch :: Cookies :: CookieJar et implémente les méthodesigned et ʻencrypted. Parce que ce n'est pas.
ʻUtiliser ActionDispatch :: Cookies :: CookieJar`.
it do
get some_url
expect(response).to have_http_status(:success)
jar = ActionDispatch::Cookies::CookieJar.build(request, cookies.to_hash) #ici
expect(jar.signed['foo']).to eq('something') #cookie signé aussi
expect(jar.encrypted['bar']).to eq('something_else') #Le cookie crypté peut également être lu
end
Cependant, cela seul ne fonctionnera pas dans le cas de secure: true (paramètre pour envoyer des cookies uniquement au serveur https). (La partie de jar.signed ['foo'] devient nil)
cookies.signed[:foo] = {
value: 'your_value_comers_here',
expires: 1.day.from_now,
secure: true, #Ce paramètre
httponly: true
}
Dans ce cas, n'utilisez pas secure: true dans les environnements development et test.
def method_that_uses_cookie
foo = 'foo'
cookies.encrypted[:foo] = build_cookies(foo)
end
def build_cookies(value)
cookie = {
value: value,
expires: 1.day.from_now,
httponly: true
}
if Rails.env.development? || Rails.env.test?
cookie
else
cookie.merge(secure: true)
end
end
Comme alternative supplémentaire à ↑, j'ai également essayé d'exécuter rspec en mode ssl.
protocol: 'https: //' et protocol :: https comme décrit dans https://stackoverflow.com/questions/6785261/test-an-https-ssl-request-in-rspec-rails J'ai essayé '', mais cela n'a pas fonctionné. Il semble que protocol n'est pas supporté par rspec en premier lieu parce qu'il dit ʻArgumentError: unknown keyword: protocol.
J'ai fait référence à cet article. https://philna.sh/blog/2020/01/15/test-signed-cookies-in-rails/