Python Django单元测试向会话添加变量

Python Django单元测试向会话添加变量,python,django,unit-testing,session,Python,Django,Unit Testing,Session,在unittest中,我需要向会话添加一个变量,因为该变量在正在测试的视图中使用。django文档说这可以通过以下方式实现(): 这个代码示例实际上不起作用,因为您将得到一个错误,即dict没有函数save。我还尝试了各种其他方法来更改会话dict中的内容,但还没有找到一种方法来更改它。 我知道这意味着什么,我得到的是一个dict对象,所以它没有保存功能。但是会话dict在添加密钥时也不会更新 文档在使用self.client.session时会显示状态,它应该返回SessionStore对象,

在unittest中,我需要向会话添加一个变量,因为该变量在正在测试的视图中使用。django文档说这可以通过以下方式实现():

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


文档在使用self.client.session时会显示状态,它应该返回SessionStore对象,而不是字典。

Django中现在似乎有一个bug,因此未经身份验证的用户无法更改会话。这是对应的票证:


解决方法是创建一个虚拟视图,其中设置了会话变量,并使用Client.get调用该视图(“url\u of\u dummy\u view”)。

目前Django中似乎存在一个bug,因此未经身份验证的用户无法更改会话。这是对应的票证:


解决方法是创建一个虚拟视图,其中设置了会话变量,并使用Client.get调用该视图(“url\u of\u dummy\u view”)。

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

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


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

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


您使用的是
unittest
还是
django.utils.unittest
?为什么需要保存它?你在哪里检查其他地方的会话?随便猜一猜,试着删除
session.save()
行,看看它是否有效。我阅读了django.test.client.client的源代码,结果表明session属性只是引擎中的session对象。它应该由会话中间件自动保存。我试过了,这也是我调试后的想法,发现它只是一个dict。我会再试一次,也许我做得不对。@Elf Sternberg:它不起作用,只是再试一次
self.client.session['user\u id']=self.user.id
您使用的是
unittest
还是
django.utils.unittest
?为什么需要保存它?你在哪里检查其他地方的会话?随便猜一猜,试着删除
session.save()
行,看看它是否有效。我阅读了django.test.client.client的源代码,结果表明session属性只是引擎中的session对象。它应该由会话中间件自动保存。我试过了,这也是我调试后的想法,发现它只是一个dict。我会再试一次,也许我做得不对。@Elf Sternberg:它不起作用,只是再试一次<代码>self.client.session['user\u id']=self.user.id
def test_something(self):
    session = self.client.session
    session['somekey'] = 'test'
    session.save()
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()