6

我正在为我的烧瓶应用程序编写一些单元测试,我需要模拟来自登录用户的请求(我正在使用烧瓶登录)。

我在 这里了解到,为此我需要修改会话并添加用户 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 标头的明确定义覆盖了包含 cookie 的标头session

我的问题是:有没有办法设置我的 cookie 而不删除session它?

如果没有,有没有办法session在我修改会话后提取 cookie,以便我可以手动将其添加到headers对象中的 cookie 列表中?

4

2 回答 2

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')
于 2013-04-29T15:58:52.860 回答
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)
于 2013-04-29T15:36:55.347 回答