2011-07-07 59 views
2

在我的单元测试中,我需要在会话中添加一个变量,因为该变量在正在测试的视图中使用。 Django的文件说,这是可能通过以下方式(https://docs.djangoproject.com/en/1.3/topics/testing/#django.test.client.Client.session):Django单元测试在会话中添加一个变量

def test_something(self): 
    session = self.client.session 
    session['somekey'] = 'test' 
    session.save() 

此代码示例实际上是行不通的,因为你会得到错误的字典不具有的功能保存。我还尝试了各种其他方式来改变会话内部的内容,但还没有找到改变它的方法。 我知道它是什么意思,我回来的是一个字典对象,所以它没有保存功能。但会话字典在添加密钥时也不会更新。

使用self.client.session时的文档状态应该返回一个SessionStore对象而不是一个字典。

+0

你使用'unittest'或'django.utils.unittest'吗? – Gabriel

+0

django.utils.unittest –

+0

为什么你需要保存它?你在哪里检查其他地方的会议? –

回答

0

似乎现在在Django中有一个错误,所以它不适用于未经身份验证的用户更改会话。这是相应的票:https://code.djangoproject.com/ticket/11475

解决方法是创建一个虚拟视图,其中设置会话变量并使用Client.get('url_of_dummy_view')调用该视图。

0

@Sam Stoelinga引用的票已作为副本关闭。相应的票据可以在here找到。

要保存会话数据,您必须使用经过身份验证的用户。我找到了一个解决方案here

class BlogAdminTestCase(TestCase): 
    def setUp(self): 
     # Setup Test User 
     User.objects.create_user(
      username='foo', 
      password='bar' 
     ) 

     # Must login to modify session variables 
     self.client.login(username='foo', password='bar') 

     s = self.client.session 
     s['my_session_variable'] = 'Yay!' 
     s.save()