如何在django test中使用响应对象访问会话变量。
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']
会给出准确的结果。
如何从响应中访问会话数据?
答案 0 :(得分:0)
检查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)访问)。”但是我想这仅在发送请求之前设置会话是真的吗?不确定,但是可以澄清一下。