[英]Accessing session object during Unit test of Flask application
我知道可以使用 session_transaction() 方法创建会话对象。 但是,有没有办法访问在例如“/”路由被命中时创建的当前会话对象? 我from flask import session
中访问了会话,但它是空的。 如果可能,请告诉我。 谢谢。
这就是你要找的。 但是,正如它所说,您必须使用在with
语句中创建的实例化。
with app.test_client() as c:
with c.session_transaction() as sess:
sess['a_key'] = 'a value'
# once this is reached the session was stored
result = app.test_client.get('/a_url')
# NOT part of the 2nd context
请注意,如果您在with c.session_transaction() as sess
语句的范围内运行测试,则这将不起作用,它需要在该块之后运行。
如果您想从测试中读取写入视图中的会话数据,一种方法是将会话视图模拟为 dict 并在测试中验证会话。 这是使用Python 的 unittest.mock的示例:
应用程序
from flask import Flask, session, request
app = Flask(__name__)
app.config["SECRET_KEY"] = "my secret key"
@app.route("/", methods=["POST"])
def index():
session["username"] = request.form["username"]
return "Username saved in session"
测试索引.py
from unittest.mock import patch
from app import app
def test_index():
with patch("app.session", dict()) as session:
client = app.test_client()
response = client.post("/", data={
"username": "test"
})
assert session.get("username") == "test"
assert response.data == b"Username saved in session"
当然,您可以使用任何您喜欢的模拟解决方案。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.