我正在为Flask Web应用程序编写一些单元测试,并且我正在尝试测试匿名用户和登录用户之间的响应差异。
我正在使用Flask-Login
扩展来实现用户登录/注销。
显然我可以执行匿名请求,但如何模拟已登录用户的请求?
我认为在session
Cookie中发送标题就足够了,但它无效。
headers = Headers({'Cookie':['WEBSITE_ID=%s; Domain=adsabs.harvard.edu; expires=Thu, 25-Apr-2213 16:53:22 GMT; Path=/' % cookie_value,
'WEBSITE_ID=%s; Domain=.adsabs.harvard.edu; expires=Thu, 25-Apr-2213 16:53:22 GMT; Path=/' % cookie_value,
'session="A VERY LONG STRING"; Path=/; HttpOnly',
]})
rv = app.test_client().get('/', headers=headers)
会话cookie值是我从浏览器中的真实登录获得的值。
我错过了什么?
答案 0 :(得分:22)
Flask-Login在会话中查找user_id
,您可以使用session_transaction
在测试中设置此项:
with app.test_client() as c:
with c.session_transaction() as sess:
sess['user_id'] = 'myuserid'
sess['_fresh'] = True # https://flask-login.readthedocs.org/en/latest/#fresh-logins
resp = c.get('/someurl')
myuserid
是user object的ID。