2013-04-29 12 views
6

Piszę niektóre testy jednostkowe dla mojej aplikacji kolby i muszę zasymulować żądanie od zalogowanego użytkownika (używam logowania do kolby).test jednostki kolby: wyślij pliki cookie po modyfikacji sesji

dowiedziałem here że do tego trzeba zmodyfikować sesję i dodać identyfikator użytkownika i parametr _fresh zrobić:

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

Moim problemem jest to, że muszę wysłać jakieś inne ciasteczka wraz z wnioskiem. Coś

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) 

ale kiedy wykonać tę prośbę sesja „znika” razem ze zmiennymi ustawić.

Myślę, że (i ktoś inny na IRC ma ten sam pomysł) to dlatego, że moja wyraźna definicja nagłówka pliku cookie zastępuje plik zawierający plik cookie session.

Moje pytanie brzmi: czy istnieje sposób ustawienia pliku cookie bez usuwania numeru session?

Jeśli nie, czy istnieje sposób wyodrębnienia pliku cookie session po zmodyfikowaniu sesji, aby można było dodać ją ręcznie do listy plików cookie w obiekcie headers?

Odpowiedz

11

rozwiązanie było o wiele łatwiejsze niż myślałem.

Przedmiotem test client ma metodę set_cookie, więc kod powinien być po prostu:

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

Jeśli zadziałało, powinieneś zaakceptować to jako odpowiedź :-) –

+0

@SeanVieira Muszę poczekać 2 dni, zanim będę mógł to zrobić :-) –

0

Wykonaj:

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' pracuje w' context' aplikacji i nie może być stosowany w sposób wspomniany –

+1

ale właśnie widziałem że c ma metodę 'set_cookie' ... więc może rozwiązałem problem! Dzięki za podpowiedź –

Powiązane problemy