2013-04-29 62 views
6

我正在爲我的燒瓶應用程序編寫一些單元測試,我需要模擬來自登錄用戶的請求(我正在使用燒瓶登錄)。燒瓶單元測試:修改會話後發送cookies

我學會here,要做到這一點,我需要修改會話並添加用戶ID和_fresh參數:

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

我的問題是,我需要一些其他的cookie與請求一起發送。 喜歡的東西

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) 

但是當我執行此請求的會話與我設置的變量「消失」在一起。

我認爲(和IRC上的其他人有相同的想法),這是因爲我對cookie頭的顯式定義覆蓋了包含session cookie的那個。

我的問題是:有沒有辦法設置我的cookie而不刪除session嗎?

如果沒有,在修改會話後是否有辦法提取session Cookie,以便我可以手動將其添加到headers對象中的cookie列表中?

回答

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

如果它的工作,你應該接受這個答案:-) – 2013-04-30 00:41:45

+0

@SeanVieira我需要等待2天才能做到這一點:-) – 2013-04-30 19:14:10

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

'在'應用context' make_response'工作以及不能你說 – 2013-04-29 15:45:13

+1

的方式使用,但我剛纔看到那c有一個'set_cookie'方法......所以也許我解決了這個問題!感謝提示 – 2013-04-29 15:48:40