Auf das signierte Cookie und das verschlüsselte Cookie kann in der Anforderungsspezifikation nicht zugegriffen werden. Der folgende Fehler wird angezeigt.
NoMethodError:
undefined method `signed' for #<Rack::Test::CookieJar:0x00007fbc6751fa38>
Dies liegt daran, dass das in der Anforderungsspezifikation verwendete Cookies-Objekt eine Instanz von "Rack :: Test :: CookieJar" anstelle von "ActionDispatch :: Cookies :: CookieJar" ist und die Methoden "signiert" und "verschlüsselt" implementiert. Weil es nicht ist.
Verwenden Sie "ActionDispatch :: Cookies :: CookieJar".
it do
get some_url
expect(response).to have_http_status(:success)
jar = ActionDispatch::Cookies::CookieJar.build(request, cookies.to_hash) #Hier
expect(jar.signed['foo']).to eq('something') #signierter Cookie auch
expect(jar.encrypted['bar']).to eq('something_else') #Verschlüsselte Cookies können ebenfalls gelesen werden
end
Dies allein funktioniert jedoch nicht im Fall von "Secure: True" (Einstellung zum Senden von Cookies nur an den https-Server). (Der Teil von jar.signed ['foo']
wird zu nil
)
cookies.signed[:foo] = {
value: 'your_value_comers_here',
expires: 1.day.from_now,
secure: true, #Diese Einstellung
httponly: true
}
Verwenden Sie in diesem Fall nicht "Secure: True" in den Umgebungen "Development" und "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
Als ergänzende Alternative zu ↑ habe ich auch versucht, rspec im SSL-Modus auszuführen.
protocol: 'https: //'
undprotocol :: https wie unter https://stackoverflow.com/questions/6785261/test-an-https-ssl-request-in-rspec-rails beschrieben Ich habe es versucht, aber es hat nicht funktioniert. Es scheint, dass
protocol von rspec überhaupt nicht unterstützt wird, da dort 'ArgumentError: unknown keyword: protocol
steht.
Ich habe auf diesen Artikel verwiesen. https://philna.sh/blog/2020/01/15/test-signed-cookies-in-rails/