私は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 {}>
この問題は、単体テスト フレームワークから実行した場合にのみ発生します。現状では、縮退したケースでこの問題を再現することはできませんが、この努力の一部の要点をここに示してかなりの努力をしました. 顕著な点は、おそらくそれらの1つが原因であると予想して、itsdangerous
とを含めたことです。Google App Engine testbed
私自身のシステムでは、gistよりもさらに進んで、これを分離しようとして、ユニット テスト フレームワークをほぼ完全に複製しました。同様に、テスト フレームワークから関連コードをますます多く削除しました。要するに、縮退したケースと、結果に影響を与える可能性のある私の簡略化されたフレームワークとの違いを考えることができません。pdbのc.post()
呼び出しを調べて、この悪意の原因を突き止めようとしましたが、有用な洞察はまだ得られていません。
つまり、問題がどこにあるのかについて、少しの指示や提案をいただければ幸いです。Werkzeug の文脈に影響を与えている可能性があるものは何session_transaction
ですか?