我如何在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']
会给出准确的结果。
我如何从响应中访问会话数据?
检查self.client.session
中的最终会话状态对我有用。 self.client
和response.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)。 ”但是我想这仅在发送请求之前设置会话是正确的吗?不确定,但是可以使用一些说明。