Testuję aplikację Flask (Flask 0.9), aw szczególności mam sesję sesji, którą chciałbym uruchomić w sposób udokumentowany, będąc czymś podobnym (jak rozumiem):Test jednostkowy sesji Flask - nie można odtworzyć błędu za pomocą session_transaction
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()
to działa zgodnie z oczekiwaniami, z wyjściem będącego coś takiego:
ERROR:root:<SecureCookieSession {'x': 1}>
Niestety ja napotkaniu nieoczekiwany rezultat w którym dane sesji nie jest ustawiony w punkcie końcowym funkcja, tzn. wynik jest mniej więcej taki:
ERROR:root:<SecureCookieSession {}>
Ten numer jest wyświetlany tylko wtedy, gdy jest uruchamiany z mojej platformy testowej. W obecnej formie nie jestem w stanie odtworzyć tego problemu ze zdegenerowanym przypadkiem, chociaż wykonałem dość duży wysiłek with a gist of some of this effort here. Najważniejsze punkty to to, że zawarłem itsdangerous
i Google App Engine testbed
, spodziewając się, że być może jedna z nich była przyczyną.
W moim własnym systemie poszedłem dalej niż gist i prawie całkowicie zreplikowałem mój układ testów jednostkowych próbując to odizolować. Podobnie, usunąłem stale rosnące ilości odpowiedniego kodu z mojej struktury testowej. Nie jestem w stanie myśleć o różnicach między zdegenerowanym przypadkiem a moim uproszczonym schematem, który mógłby wpłynąć na wynik. Przeprowadziłem wywołanie c.post()
w pdb, aby wypróbować przyczynę tej złośliwości, ale muszę jeszcze zebrać wszelkie przydatne informacje.
To wszystko, co mogę powiedzieć, byłbym wdzięczny za mały kierunek lub sugestię, gdzie może leżeć problem. Co może mieć wpływ na kontekst Werkzeug w taki sposób, że session_transaction
nie jest honorowany?
Wiem, że minął już rok, ale sam wpadam na ten problem. Czy kiedykolwiek byłeś w stanie to rozgryźć? Zgodnie z tym, co przeczytałem online i w dokumentach, powinno to działać idealnie. Ale tak nie jest. –
@IanHunter Spójrz na moją odpowiedź, poniżej. To może pomóc. –