Я тестирую приложение Flask (Flask 0.9), и, в частности, у меня есть сеансовое устройство, которое я бы хотел запустить в документальном режиме, что-то вроде этого (как я понимаю):Узел тестирования сеанса фляжки - не удается воспроизвести сбой с 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()
Это работает, как ожидалось, а вывод что-то вроде этого:
ERROR:root:<SecureCookieSession {'x': 1}>
к сожалению, я встречая неожиданный результат, в котором данные сеанса не установлен в конечной точке функция, то есть выход выглядит примерно так:
ERROR:root:<SecureCookieSession {}>
Эта проблема проявляется только при запуске с моего модуля тестирования модулей. Как бы то ни было, я не могу воспроизвести эту проблему с дегенеративным случаем, хотя я сделал довольно значительные усилия with a gist of some of this effort here. Главным моментом является то, что я включил itsdangerous
и Google App Engine testbed
, ожидая, что, возможно, одна из них была причиной.
В моей собственной системе я пошел дальше, чем gist, и почти полностью реплицировал мою модульную тестовую среду, пытаясь ее изолировать. Аналогичным образом, я удалил все увеличивающиеся количества соответствующего кода из моей системы тестирования. К моменту, я не могу думать о различиях между вырожденным случаем и моей урезанной структурой, которая могла бы повлиять на результат. Я прошел по вызову в pdb, чтобы попытаться выяснить причину этой злости, но еще не получить полезную информацию.
Что бы все сказать, я был бы благодарен за небольшое руководство или предложение относительно того, где может быть проблема. Что может повлиять на контекст Werkzeug таким образом, что session_transaction
не соблюдается?
Я знаю, что это был год, но я сам сталкиваюсь с этой проблемой. Вы когда-нибудь могли это понять? Согласно тому, что я читал в Интернете и в документах, это должно работать отлично. Но это не так. –
@IanHunter Посмотрите на мой ответ ниже. Это может помочь. –