Я тестирую приложение Flask (Flask 0.9), и, в частности, у меня есть сеансовое устройство, которое я хотел бы запустить документированным способом, будучи чем-то вроде этого (как я понимаю):
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 {}>
Эта проблема проявляется только при запуске из моей модульной системы тестирования. Как бы то ни было, я не могу воспроизвести эту проблему с дегенеративным случаем, хотя я сделал довольно значительные усилия с сущностью некоторых из этих усилий здесь. Главным моментом является то, что я включил itsdangerous
и Google App Engine testbed
, ожидая, что, возможно, одна из них была причиной.
В моей собственной системе я пошел дальше, чем сущность, и почти полностью реплицировал мою инфраструктуру unit test, пытаясь ее изолировать. Аналогичным образом, я удалил все увеличивающиеся количества соответствующего кода из моей системы тестирования. К моменту, я не могу думать о различиях между вырожденным случаем и моей урезанной структурой, которая могла бы повлиять на результат. Я прошел через вызов c.post()
в pdb, чтобы попытаться выяснить причину этой злости, но еще не получил полезной информации.
Что бы все сказать, я был бы благодарен за небольшое руководство или предложение относительно того, где может быть проблема. Что может повлиять на контекст Werkzeug таким образом, что session_transaction
не соблюдается?