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

时间:2018-04-20 10:34:15

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

如何在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']会给出准确的结果。

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

1 个答案:

答案 0 :(得分: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)访问)。”但是我想这仅在发送请求之前设置会话是真的吗?不确定,但是可以澄清一下。