2013-04-29 7 views
6

संशोधित करने के बाद कुकीज़ भेजें मैं अपने फ्लास्क एप्लिकेशन के लिए कुछ यूनिट परीक्षण लिख रहा हूं और मुझे लॉग इन उपयोगकर्ता (मैं फ्लास्क लॉगिन का उपयोग कर रहा हूं) से अनुरोध अनुकरण करने की आवश्यकता है।फ्लास्क इकाई परीक्षण: सत्र

मैं here है कि इस मैं सत्र को संशोधित करने और प्रयोक्ता आईडी और एक _fresh पैरामीटर जोड़ना करने के लिए सीखा है:

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({'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) 

की तरह लेकिन जब मैं यह अनुरोध करने के सत्र एक साथ "गायब हो जाता है" चर मैं सेट के साथ।

मुझे लगता है (और आईआरसी पर किसी और के पास एक ही विचार है) ऐसा इसलिए है क्योंकि कुकी हेडर की मेरी स्पष्ट परिभाषा session कुकी युक्त एक को ओवरराइट करती है।

मेरा प्रश्न है: क्या session एक को हटाए बिना मेरी कुकी सेट करने का कोई तरीका है?

यदि नहीं, तो सत्र को संशोधित करने के बाद session कुकी निकालने का कोई तरीका है ताकि मैं इसे headers ऑब्जेक्ट में कुकीज़ की सूची में मैन्युअल रूप से जोड़ सकूं?

उत्तर

11

समाधान बहुत आसान की तुलना में मैंने सोचा था।

test client वस्तु एक विधि set_cookie है, तो कोड बस होना चाहिए:

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

के लिए धन्यवाद अगर यह काम करता है तो आपको इसे उत्तर के रूप में स्वीकार करना चाहिए :-) –

+0

@ सेनविएरा मुझे इसे करने से 2 दिन पहले इंतजार करना होगा :-) –

0

यह करें:

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' एक' आवेदन context' में काम करता है और जिस तरह से आप ने कहा –

+1

में नहीं किया जा सकता, लेकिन मैं अभी-अभी देखा उस सी में 'set_cookie' विधि है ... तो शायद मैंने समस्या हल की! संकेत –

संबंधित मुद्दे