Ich teste eine Flask-Anwendung (Flask 0.9), und insbesondere habe ich eine Sitzung Leuchte, die ich in der dokumentierten Weise ausführen möchte, in etwa so (ich bin der Begegnung ist ein unerwartetes Ergebnis, wo die Sitzungsdaten nicht in der Endpunkt gesetztUnit-Test eine Flask-Sitzung - kann Fehler nicht mit Session_Transaction reproduzieren
ERROR:root:<SecureCookieSession {'x': 1}>
Leider: wie ich es verstehe):
from flask import Flask, session
app = Flask(__name__)
@app.route('/', methods=['POST'])
def m():
logging.error(session) # expect {'x': 1}
return ""
with app.test_request_context() as trc:
with app.test_client() as c:
with c.session_transaction() as sess:
sess['x'] = 1
c.post()
Dies funktioniert wie erwartet, wobei der Ausgang ist so etwas wie dieses Funktion, dh die Ausgabe ist etwa so:
ERROR:root:<SecureCookieSession {}>
Dieses Problem tritt nur auf, wenn es von meinem Unit-Test-Framework ausgeführt wird. Wie es aussieht, kann ich dieses Problem nicht mit einem degenerierten Fall reproduzieren, obwohl ich eine ziemlich erhebliche Anstrengung unternommen habe with a gist of some of this effort here. Der springende Punkt ist, dass ich itsdangerous
und Google App Engine testbed
eingeschlossen habe, in der Erwartung, dass einer von ihnen die Ursache war.
Auf meinem eigenen System bin ich weiter gegangen als die gist, und fast vollständig repliziert meine Unit-Test-Framework versucht, dies zu isolieren. Ebenso habe ich immer größere Mengen an relevantem Code aus meinem Test-Framework entfernt. Auf den Punkt bin ich nicht in der Lage, an Unterschiede zwischen dem entarteten Fall und meinem abgespeckten Rahmen zu denken, der das Ergebnis beeinflussen könnte. Ich habe den c.post()
Aufruf in pdb durchlaufen, um zu versuchen, die Ursache dieser Malignität herauszufinden, aber habe noch irgendwelche nützlichen Einblicke zu gewinnen.
Was alles zu sagen ist, wäre ich dankbar für eine kleine Richtung oder einen Vorschlag, wo das Problem liegen könnte. Was könnte den Werkzeug Kontext so beeinflussen, dass die nicht geehrt wird?
Ich weiß, dass es ein Jahr ist, aber ich stoße selbst auf dieses Problem. Konntest du das jemals herausfinden? Laut was ich online und in der Dokumentation gelesen habe, sollte dies perfekt funktionieren. Aber das tut es nicht. –
@IanHunter Schauen Sie sich meine Antwort unten an. Es könnte helfen. –