如何在Django测试中从响应对象访问会话变量?

问题描述 投票:1回答:1

我如何在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')

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

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

django python-2.7 django-testing django-sessions
1个回答
0
投票

检查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)。 ”但是我想这仅在发送请求之前设置会话是正确的吗?不确定,但是可以使用一些说明。

© www.soinside.com 2019 - 2024. All rights reserved.