Qualcuno conosce un modo per impostare (simulare) l'agente utente dell'oggetto richiesta fornito da FLask (Werkzeug) durante il test dell'unità?Impostazione (mocking) delle intestazioni di richiesta per il test dell'unità Flask
Allo stato attuale, quando cerco di ottenere dettagli come request.headers ['User-Agent'] viene sollevato un KeyError poiché il Flask test_client() non li imposta. (Vedere la traccia parziale dello stack di seguito)
Quando si tenta di ottenere l'agente utente dall'oggetto richiesta in un progetto Flask durante il test dell'unità, viene sollevato un errore chiave.
File "/Users/me/app/rest/app.py", line 515, in login
if request.headers['User-Agent']:
File "/Users/me/.virtualenvs/app/lib/python2.7/site-packages/werkzeug/datastructures.py", line 1229, in __getitem__
return self.environ['HTTP_' + key]
KeyError: 'HTTP_USER_AGENT'
- AGGIORNAMENTO -
Insieme con la soluzione (accettato) di seguito, il suggerimento environ_base mi portano a questo altro SO solution. La premessa di questa soluzione è di creare una classe wrapper per l'app Flask e sovrascrivere il metodo per impostare automaticamente le variabili d'ambiente. In questo modo, le variabili sono impostate per tutte le chiamate. Quindi, la soluzione che ho finito per attuare è la creazione di questa classe proxy:
class FlaskTestClientProxy(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
environ['REMOTE_ADDR'] = environ.get('REMOTE_ADDR', '127.0.0.1')
environ['HTTP_USER_AGENT'] = environ.get('HTTP_USER_AGENT', 'Chrome')
return self.app(environ, start_response)
E poi avvolgere il contenitore WSGI con quella delega:
app.wsgi_app = FlaskTestClientProxy(app.wsgi_app)
test_client = app.test_client()
Grazie! Anche se ho finito per utilizzare la soluzione che ho incluso nella mia domanda originale sopra, questo avrebbe funzionato perfettamente bene. – prschmid
Bello, penso che la soluzione sia molto più elegante se hai bisogno di impostare quelle variabili d'ambiente su tutti i tuoi test ... In effetti penso che mi hai convinto a cambiare le mie app Flask per fare la stessa cosa! –
Fantastico. Felice di poterti aiutare! – prschmid