【问题标题】:Getting / Setting session key in Django Unit Tests在 Django 单元测试中获取/设置会话密钥
【发布时间】:2017-06-01 04:58:03
【问题描述】:

我将session_key 保存到一个对象中,以便将数据与匿名用户相关联。在单元测试中,我试图使用测试客户端来设置一个固定的键,但是键在 POST 请求期间发生了变化。一个例子:

// tests.py

def test_post(self):
    session_key = "123"
    session = self.client.session
    session['session_key'] = session_key
    session.save()

    response = self.client.post('/post-url/')
    self.assertEquals(response.content, session_key)
    # AssertionError: b'str60i3gjpvru8f7mellsdf2y3xd2jgh' != '123'


// views.py

@require_http_methods(['POST'])
def ajax_post(request):
    return HttpResponse(request.session.session_key)

基于此comment,我尝试在更改 session_key 之前包含另一个 GET 响应 response = self.client.get('/'),但似乎没有帮助。

我做错了什么?

编辑:我使用的是 Django 1.9.6、Python 3.4。在 Daniel Roseman 回答后更改了问题标题。

【问题讨论】:

    标签: django unit-testing session-keys


    【解决方案1】:

    我不太确定你在这里做什么。 session['session_key']session.session_key不一样;前者只是会话中的另一个值。

    但是没有理由对会话密钥做任何明确的事情。它应该是一个纯粹的不透明值,您的代码永远不会与之交互。如果您想将数据与匿名用户的会话相关联,您应该将数据存储在会话中,而不是相反。

    【讨论】:

    • 好点。我这样做是为了更容易根据匿名用户的历史数据进行计算 - 你对解决这个问题有其他建议吗?如果我将它存储在会话中,我最终不得不从那里提取数据。无论如何,从您的回答中我意识到我可以在测试开始时选择session.session_key,然后创建所需的模型。谢谢!
    猜你喜欢
    • 2011-07-05
    • 1970-01-01
    • 2017-12-10
    • 2014-09-27
    • 2018-09-02
    • 2013-01-20
    • 1970-01-01
    • 2012-07-20
    • 2021-09-02
    相关资源
    最近更新 更多