python - Flask:在请求上下文中插入新属性以进行测试
问题描述
我有一个向请求对象添加属性的中间件。
# middleware.py
from flask import request
...
def middleware():
# some logic..
result = api_call(processed_auth_token)
setattr(request, "result", result)
我将此属性用作路由器逻辑的一部分
# routes.py
@app.route('/my_route')
@middleware
def simple_route():
...
# use request.result here...
在测试期间,我不想经历生成令牌和调用 api_call 的麻烦(也是出于实际原因,因为我的部署管道无法访问互联网)。我希望能够在测试期间将不同的值附加到我的结果属性。所以给定一个如下的测试场景
# test_simple_route.py
...
def test_simple_route(client):
# client is in the context of test_client
response = client.get('/my_route')
...
如何在上面的获取请求中的请求对象(来自烧瓶)中设置“结果”属性?我试过使用test_request_context
,但请求最终在与客户端不同的上下文中。有任何想法吗?
解决方案
通过测试客户端发出请求会设置一个新的请求上下文。
您可以在设置请求上下文后直接调用视图函数来测试中间件,如下所示:
import flask
def test_simple_route(app):
with app.test_request_context():
setattr(flask.request, "result", "test-value")
response = simple_route()
我强烈建议将此session
对象用于此用例。它们允许存储从请求到每个用户请求的信息。