【问题标题】:Flask app wrapped with DispatcherMiddleware no longer has test_client用 DispatcherMiddleware 包装的 Flask 应用不再有 test_client
【发布时间】:2016-03-25 12:21:25
【问题描述】:

我们可以通过以下方式获取test_client作为示例应用程序:

class MyTestCase(unittest.TestCase):
    @classmethod
    def setUpClass(cls):
        my_app.app.config['TESTING'] = True
        cls.client = my_app.app.test_client()

但是,如果我们用 DispatcherMiddleware 包装应用程序 - 我们会得到类似的错误 AttributeError: 'DispatcherMiddleware' object has no attribute 'test_client'.

有没有办法测试烧瓶应用程序的组成?

我们希望能够做这样的事情:

cls.client = my_app.all_apps.test_client()

all_apps 是中间件时:

all_apps = DispatcherMiddleware(my_app, {
    '/backend': backend_app,
})

【问题讨论】:

    标签: python flask werkzeug


    【解决方案1】:

    要将 WSGI 中间件添加到 Flask 应用程序,请包装并替换应用程序的 wsgi_app 属性。您正在用对其他一些 WSGI 应用程序的引用替换对 Flask 应用程序的引用,这些应用程序显然不会具有相同的属性。通过替换 wsgi_app,您保留了对 Flask 应用程序的引用,但更改了支持它的 WSGI 可调用对象。

    app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
        '/backend': backend_app.wsgi_app,
    })
    

    【讨论】:

      【解决方案2】:

      我希望在两个捆绑的应用程序上都使用 test_client。这是对大卫主义答案的修改,允许我对两者都使用测试客户端:

      app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
          '/backend': backend_app.wsgi_app
      })
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-09
        • 2014-07-27
        • 1970-01-01
        相关资源
        最近更新 更多