我正在为我的烧瓶应用程序编写一些单元测试,我需要模拟来自登录用户的请求(我正在使用烧瓶登录)。
我了解到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列表中?
答案 0 :(得分:12)
解决方案比我想象的容易得多。
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')
答案 1 :(得分: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)