2013-04-29 4 views
6

Ich schreibe einige unit-tests für meine flask-anwendung und ich muss eine anfrage von einem angemeldeten benutzer simulieren (ich benutze flask login).flascheneinheit test: sende cookies nach dem ändern der sitzung

Ich lernte here, dass dies muss ich ändern, um die Sitzung und fügen Sie den Benutzer-ID und ein _fresh Parameter zu tun:

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

Mein Problem ist, dass ich senden einige andere Cookies zusammen mit dem Antrag. So etwas wie

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) 

aber wenn ich diese Anforderung erfüllen die Sitzung „verschwindet“ zusammen mit den Variablen I festgelegt.

Ich denke (und jemand anderes im IRC hat die gleiche Idee), weil meine explizite Definition des Cookie-Headers den Cookie mit dem session Cookie überschreibt.

Meine Frage ist: Gibt es eine Möglichkeit, meinen Cookie zu setzen, ohne die session einen zu entfernen?

Wenn nicht, gibt es eine Möglichkeit, den Cookie session zu extrahieren, nachdem ich die Sitzung geändert habe, sodass ich sie manuell zur Liste der Cookies im Objekt headers hinzufügen kann? diese

Antwort

11

die Lösung war viel einfacher, als ich dachte.

Das test client Objekt hat eine Methode set_cookie, so sollte der Code einfach sein:

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

Wenn es geklappt hat sollte man das als Antwort akzeptieren :-) –

+0

@SeanVieira Ich muss 2 Tage warten bevor ich es machen kann :-) –

0

Sie:

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' in einer' Anwendung context' funktioniert und es kann nicht in der Art und Weise verwendet werden Sie –

+1

sagte, aber ich habe gerade gesehen, das c hat eine 'set_cookie'-methode ... also vielleicht habe ich das problem gelöst! Danke für den Hinweis –

Verwandte Themen