繁体   English   中英

Flask:在请求上下文中插入新属性以进行测试

[英]Flask: Interpolating new attributes in request context for testing

我有一个向请求 object 添加属性的中间件。

# 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 的麻烦来 go (也是出于实际原因,因为我的部署管道无法访问互联网)。 我希望能够在测试期间对我的结果属性 append 不同的值。 所以给定一个如下的测试场景

# test_simple_route.py
...
def test_simple_route(client):
    # client is in the context of test_client
    response = client.get('/my_route')
    ...

如何在上面的获取请求中的请求 object(来自烧瓶)中设置“结果”属性? 我试过使用test_request_context ,但请求最终在与客户端不同的上下文中。 有任何想法吗?

通过测试客户端发出请求会设置一个新的请求上下文。

您可以在设置请求上下文后直接调用视图 function 来测试中间件,如下所示:

import flask

def test_simple_route(app):
    with app.test_request_context():
        setattr(flask.request, "result", "test-value")
        response = simple_route() 

对于这个用例,我强烈建议使用session object。 它们允许存储从请求到每个用户请求的信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM