2016-03-25 10 views
3

Wir test_client für Beispielanwendung in Art und Weise, wie erhalten:Flask App mit DispatcherMiddleware umwickelt nicht mehr test_client

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

Wenn wir jedoch App mit DispatcherMiddleware wickeln - wir werden Fehler erhalten wie AttributeError: 'DispatcherMiddleware' object has no attribute 'test_client'.

Gibt es einen Weg, die Zusammensetzung der Kolbenanwendungen zu testen?

Wir wollen in der Lage sein, etwas zu tun wie:

cls.client = my_app.all_apps.test_client() 

Wenn all_apps ist Middleware wie:

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

Antwort

5

Um WSGI Middleware in einen Kolben App, wickeln und ersetzen Sie die App wsgi_app Attribut hinzufügen . Sie ersetzen den Verweis auf die Flask-App durch einen Verweis auf eine andere WSGI-App, die offensichtlich nicht dieselben Eigenschaften aufweist. Indem Sie wsgi_app ersetzen, behalten Sie den Verweis auf die Flask-App bei, ändern jedoch die WSGI-Callable, die sie unterstützt.

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

Wow .. diese Lösung gesehen, haben aber nicht darauf geachtet, dass wir 'app.wsgi_app' zu' DispatherMiddleware' passieren sollte erstes Argument. –

0

Ich suchte die test_client auf beiden der gebündelten Anwendungen zu verwenden. Hier ist eine Modifikation davidism Antwort, die mich Test-Clients für beide verwenden dürfen:

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