【问题标题】:Unittest Flask flask.g单元测试烧瓶烧瓶.g
【发布时间】:2016-06-06 09:53:44
【问题描述】:

当我进行单元测试时,我希望能够设置和访问flask.g

flask.g['test'] = {'test': '123'}
test_dict = flask.g['test']

产生这个错误:

Error
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/werkzeug/local.py", line 346, in __setitem__
    self._get_current_object()[key] = value
TypeError: '_AppCtxGlobals' object does not support item assignment

但是,当我在生产环境中运行它时,一切正常。如果我使用setattrgetattr,单元测试有效,但生产中断, 我收到以下错误

Error
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 268, in error_router
    return self.handle_error(e)
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1475, in full_dispatch_request
    rv = self.dispatch_request()
  File "/usr/local/lib/python2.7/dist-packages/flask/app.py", line 1461, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 477, in wrapper
    resp = resource(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask/views.py", line 84, in view
    return self.dispatch_request(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/flask_restful/__init__.py", line 587, in dispatch_request
resp = meth(*args, **kwargs)
    args = getattr(flask.g, 'test')
AttributeError: 'dict' object has no attribute 'test'

我在app_context() 中运行单元测试。目标是拥有真正代表生产的单元测试。我怎样才能做到这一点?

【问题讨论】:

    标签: python python-2.7 unit-testing flask python-unittest


    【解决方案1】:

    这两种用法现在是等价的

    user = getattr(flask.g, 'user', None)
    user = flask.g.get('user', None)
    

    使用示例

    def get_user():
        user = getattr(g, 'user', None)
        if user is None:
            user = fetch_current_user_from_database()
            g.user = user
        return user
    

    official documentationtesting documentation 中的更多信息

    【讨论】:

    • 奇怪的是,我可以在运行应用程序(Flask 原生运行程序或 gunicorn)时执行 flask.g['test'] = 'test',一切正常。但在单元测试中失败。但是,我使用的是上面的代码,一切正常。
    猜你喜欢
    • 2021-09-07
    • 2019-01-04
    • 2015-03-15
    • 2017-12-07
    • 2018-11-09
    • 1970-01-01
    • 1970-01-01
    • 2014-03-12
    • 2017-08-15
    相关资源
    最近更新 更多