用 DispatcherMiddleware 包裹的 Flask 应用程序不再有 test_client
Flask app wrapped with DispatcherMiddleware no longer has test_client
我们可以通过以下方式获取示例应用程序的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'
.
有没有办法测试 Flask 应用程序的组成?
我们希望能够做这样的事情:
cls.client = my_app.all_apps.test_client()
当 all_apps
是像这样的中间件时:
all_apps = DispatcherMiddleware(my_app, {
'/backend': backend_app,
})
要将 WSGI 中间件添加到 Flask 应用程序,包装并替换应用程序的 wsgi_app
属性。您正在用对其他一些 WSGI 应用程序的引用替换对 Flask 应用程序的引用,这显然不会具有相同的属性。通过替换 wsgi_app
,您保留了对 Flask 应用程序的引用,但更改了支持它的 WSGI 可调用对象。
app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
'/backend': backend_app.wsgi_app,
})
我想在两个捆绑的应用程序上使用 test_client
。这是对 davidism 答案的修改,它允许我对两者都使用测试客户端:
app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
'/backend': backend_app.wsgi_app
})
我们可以通过以下方式获取示例应用程序的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'
.
有没有办法测试 Flask 应用程序的组成?
我们希望能够做这样的事情:
cls.client = my_app.all_apps.test_client()
当 all_apps
是像这样的中间件时:
all_apps = DispatcherMiddleware(my_app, {
'/backend': backend_app,
})
要将 WSGI 中间件添加到 Flask 应用程序,包装并替换应用程序的 wsgi_app
属性。您正在用对其他一些 WSGI 应用程序的引用替换对 Flask 应用程序的引用,这显然不会具有相同的属性。通过替换 wsgi_app
,您保留了对 Flask 应用程序的引用,但更改了支持它的 WSGI 可调用对象。
app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
'/backend': backend_app.wsgi_app,
})
我想在两个捆绑的应用程序上使用 test_client
。这是对 davidism 答案的修改,它允许我对两者都使用测试客户端:
app.wsgi_app = DispatcherMiddleware(app.wsgi_app, {
'/backend': backend_app.wsgi_app
})