烧瓶单元测试:修改会话后发送cookie

Gio*_*lia 6 python cookies session flask flask-login

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

我在这里学到 要做到这一点,我需要修改会话并添加用户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')
Run Code Online (Sandbox Code Playgroud)

我的问题是我需要将一些其他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)
Run Code Online (Sandbox Code Playgroud)

但是当我执行此请求时,会话与我设置的变量一起"消失".

我认为(和IRC上的其他人有相同的想法)这是因为我对cookie标题的明确定义会覆盖包含cookie的标题session.

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

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

Gio*_*lia 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')
Run Code Online (Sandbox Code Playgroud)