用DispatcherMiddleware包装的Flask应用程序不再具有test_client

时间:2016-03-25 12:21:25

标签: python flask werkzeug

我们可以通过以下方式获取示例应用的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,
})

2 个答案:

答案 0 :(得分:8)

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

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

答案 1 :(得分:0)

我希望在两个捆绑的应用上使用test_client。这是对davidism的回答的修改,允许我使用测试客户端:

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