2013-04-29 5 views
6

Sto scrivendo alcuni test unitari per la mia applicazione flask e ho bisogno di simulare una richiesta da un utente connesso (sto usando login flask).test unità pallone: ​​inviare i cookie dopo aver modificato la sessione

ho imparato here che per fare questo ho bisogno di modificare la sessione e aggiungere l'ID utente e un parametro _fresh:

with app.test_client() as c: 
    with c.session_transaction() as sess: 
     sess['user_id'] = 'myuserid' 
     sess['_fresh'] = True 
    resp = c.get('/someurl') 

mio problema è che ho bisogno di inviare alcuni altri biscotti insieme alla richiesta. Qualcosa come

headers = Headers({'Cookie':'MYCOOKIE=cookie_value;'}) 
with app.test_client() as c: 
    with c.session_transaction() as sess: 
     sess['user_id'] = 'myuserid' 
     sess['_fresh'] = True 
    resp = c.get('/someurl', headers=headers) 

ma quando eseguo questa richiesta la sessione "scompare" insieme alle variabili ho impostato.

Penso che (e qualcun altro su IRC abbia la stessa idea) è perché la mia definizione esplicita dell'intestazione del cookie sovrascrive quella contenente il cookie session.

La mia domanda è: c'è un modo per impostare il mio cookie senza rimuovere lo session?

In caso contrario, esiste un modo per estrarre il cookie session dopo aver modificato la sessione in modo che sia possibile aggiungerla manualmente all'elenco di cookie nell'oggetto headers?

risposta

11

la soluzione era molto più facile di quanto pensassi.

L'oggetto test client ha un metodo set_cookie, in modo che il codice dovrebbe essere semplicemente:

with app.test_client() as c: 
    with c.session_transaction() as sess: 
     sess['user_id'] = 'myuserid' 
     sess['_fresh'] = True 
    c.set_cookie('localhost', 'MYCOOKIE', 'cookie_value') 
    resp = c.get('/someurl') 
+0

Se ha funzionato dovresti accettarlo come risposta :-) –

+0

@SeanVieira Devo aspettare 2 giorni prima di poterlo fare :-) –

0

fare questo:

with app.test_client() as c: 
    with c.session_transaction() as sess: 
     sess['user_id'] = 'myuserid' 
     sess['_fresh'] = True 
    resp = make_response(redirect('/someurl')) 
    resp.set_cookie('MYCOOKIE', cookie_value) 
+0

'make_response' lavora in un context'' applicazione e non può essere utilizzato nel modo che hai detto –

+1

ma ho appena visto che c ha un metodo 'set_cookie' ... quindi forse ho risolto il problema! Grazie per il suggerimento –

Problemi correlati