【问题标题】:How to access session variable from response object in django test?如何在 django 测试中从响应对象访问会话变量?
【发布时间】:2018-10-01 01:18:50
【问题描述】:

如何在 django 测试中使用响应对象访问会话变量。

def test(self):    
    postdata={'user':'staff'}
    self.client.login(username='vishnu',password='vishnu@12345')
    session=self.client.session
    session['user']='manager'
    session.save()

    response=self.client.post(reverse('userhome'),postdata)
    self.assertEqual(session['user'],'staff')

此测试在运行时失败。在上面的测试中,调用 post 请求后,会话变量 'user' 将变为人员。我如何检查更改? session['user'] 在请求后给出相同的结果。但是在视图函数request.session['user'] 中给出了准确的结果。

如何从响应中访问会话数据?

【问题讨论】:

  • 请向我们展示修改会话的视图代码。
  • 查看代码仅包含赋值request.session['user']=request.POST['user']

标签: django python-2.7 django-testing django-sessions


【解决方案1】:

检查self.client.session 中的最终会话状态对我有用。 self.clientresponse.client 是同一个对象,所以你可以使用 response.client.session 如果这更好地表明意图:

def test(self):    
    postdata={'user':'staff'}
    self.client.login(username='vishnu',password='vishnu@12345')
    session=self.client.session
    session['user']='manager'
    session.save()
    response=self.client.post(reverse('userhome'),postdata)

    self.assertIn('user', self.client.session)
    self.assertEqual(self.client.session['user'], 'staff')

    self.assertIn('user', response.client.session)
    self.assertEqual(response.client.session['user'], 'staff')

documentation 似乎暗示这不起作用:“要修改会话然后保存它,必须先将它存储在一个变量中(因为每次访问此属性时都会创建一个新的 SessionStore) 。”但我想这只是在发送请求之前设置会话是真的吗?不确定,但可以澄清一下。

【讨论】:

    猜你喜欢
    • 2011-02-02
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    • 2012-12-28
    • 1970-01-01
    相关资源
    最近更新 更多