2017-06-08 1 views
0

Rails-Version: 5.1.1 Upgrade von 4.2.7Integration Testsitzung nicht geladen Session-Cookie

ich einen Integrationstest haben (inherting von ActionDispatch :: IntegrationTest), die eine URL trifft. Der Controller unter dieser URL fügt einige Dinge in die Sitzung ein. Der Test versucht dann zu bestätigen, dass bestimmte Werte in der Sitzung vorhanden sind.

Mein session_store.rb:

Rails.application.config.session_store :cookie_store, key: '_companySite_session', expire_after: 1.year 

Was ich finde, ist, dass das Session-Variable, aus dem Integrationstest als 'Sitzung' genannt wird, ist immer eine leere Hash ({}).

Wenn ich im Test auf request.host schaue, sehe ich "www.example.com". Wenn ich bei Response.Cookies oder Cookies sehen, ich sehe:

#<Rack::Test::Cookie:0x00000006037108 
@default_host="www.example.com", 
@name="_companySite_session", 
@name_value_raw= 
"_companySite_session=a3RnYjRvWDlUYzRZaVlaTnlsK2RkeXBWcWFNYnQ1RVo4azNqdXNOanVWWWZVT2o5Vk0wTkVhY1dFOTBxdWNzMU5sY3c1cXhXRm0xT3JZWWZGUnluSnRuYTVoaWQ1S3ZZRXVMa1YyQ2pUMjEvOExaWkcybTdGT3lUZnZ0STRSSGVpc0dPU1VONWNwTEZxQlRvODN3eXdKZTYreVIvNDR4Y0IxMms2djlPWUZCcktYWmo1SElSZ0ttaHA5UWk5MDA5aVJzaGt3cUJ4V2tFY295ZGo4ak8ydUI3OWRnTUdkcmRpanVML3phalJtZ2c1OXByeExiRDhlcy9rR1RYUGh6NlkxV2xqNWl2VjlCMm45WXo0ajBKN0VTQ29CVGRQRVErOVIrNFZwdEZBc01oL2RaSGltUjdleGlWN3YySTdJUzcvbVlJbWdwWVNUVkw4K1pPc3JsUWxOR1BZNFVrUXFtYVVObmNlYlZrSklEbk5aU3VTck5MNm12a0NBMVF2aG5xLS1pSEJTVTVLZzJ2ZVA2M1IzTmJ4Njh3PT0%3D--f253c4e1678e53896a247b087e741cf006c5874f", 
@options={"path"=>"/", "expires"=>"Fri, 08 Jun 2018 19:46:22 -0000", "HttpOnly"=>nil, "domain"=>"www.example.com"}, 
@value= 
"a3RnYjRvWDlUYzRZaVlaTnlsK2RkeXBWcWFNYnQ1RVo4azNqdXNOanVWWWZVT2o5Vk0wTkVhY1dFOTBxdWNzMU5sY3c1cXhXRm0xT3JZWWZGUnluSnRuYTVoaWQ1S3ZZRXVMa1YyQ2pUMjEvOExaWkcybTdGT3lUZnZ0STRSSGVpc0dPU1VONWNwTEZxQlRvODN3eXdKZTYreVIvNDR4Y0IxMms2djlPWUZCcktYWmo1SElSZ0ttaHA5UWk5MDA5aVJzaGt3cUJ4V2tFY295ZGo4ak8ydUI3OWRnTUdkcmRpanVML3phalJtZ2c1OXByeExiRDhlcy9rR1RYUGh6NlkxV2xqNWl2VjlCMm45WXo0ajBKN0VTQ29CVGRQRVErOVIrNFZwdEZBc01oL2RaSGltUjdleGlWN3YySTdJUzcvbVlJbWdwWVNUVkw4K1pPc3JsUWxOR1BZNFVrUXFtYVVObmNlYlZrSklEbk5aU3VTck5MNm12a0NBMVF2aG5xLS1pSEJTVTVLZzJ2ZVA2M1IzTmJ4Njh3PT0=--f253c4e1678e53896a247b087e741cf006c5874f"> 

Mit anderen Worten scheint der Session-Cookie vorhanden zu sein, und seine Domäne scheint die Anforderung des Host zu entsprechen. Ich habe auch den Code von How to decrypt a Rails 5 session cookie manually? verwendet, um den Wert dieses Cookies auszudrucken, und der Wert ist korrekt.

Meine Testumgebung config gibt config.action_controller.allow_forgery_protection = false

An dieser Stelle ich aus Ideen bin. Der Cookie ist da, es scheint in Ordnung zu sein, es ist auf die Domäne der Anfrage eingestellt, es ist nicht abgelaufen, aber die Sitzung bleibt ein leerer Hash. Wird es nicht irgendwie aktualisiert? Wird versucht, zu aktualisieren, aber im Hintergrund zu versagen? Ich habe keine Dinge mehr, um es zu versuchen.

Dieser Test funktioniert unter Rails 4.2.7.

Während ich nicht so vollständig in es getaucht habe, habe ich auch festgestellt, dass die Flash-Variable der Tests immer auch leer zu sein scheint. Tests, die in Rails 4 gut funktionierten, brechen wieder, weil der Flash immer leer zu sein scheint. Ich nehme an, der Blitz und die Sitzung sind miteinander verwandt, so dass sie vielleicht beide von demselben Problem betroffen sind.

Antwort

0

Die Lösung war, dass wir diese Einstellung in unserer test.rb Umgebungsdatei hatten:

config.allow_concurrency = false 

Aus irgendeinem Grunde, nach einer Anfrage im Test zu machen, ist diese Einstellung der Sitzung mit einem leeren ersetzt werden verursacht Hash. Die Dokumentation von Rails schlägt vor, dass Sie diese Markierung nicht direkt setzen: http://guides.rubyonrails.org/v3.2/configuring.html.

Ich denke, das ist etwas, das wir in Rails 2 gesetzt hatten, dann in Rails 4 durch wurde, als ich aufgerüstet, und breche jetzt in Rails 5.em

Ich habe es als ein Problem in dem Rails-Repo protokolliert: https://github.com/rails/rails/issues/29608