Django Unittesting向会话添加变量

时间:2011-07-07 17:40:44

标签: python django unit-testing session

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

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

此代码示例实际上不起作用,因为您将收到dict没有函数save的错误。我还尝试了各种其他方法来更改会话dict中的内容,但还没有找到改变它的方法。 我知道这意味着什么,我得到的是一个dict对象,所以它没有保存功能。但是在添加密钥时会话dict也不会更新。

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

2 个答案:

答案 0 :(得分:0)

现在看来Django中存在一个错误,因此对于未经身份验证的用户来说,它不适用于更改会话。这是相应的票证:https://code.djangoproject.com/ticket/11475

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

答案 1 :(得分: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()