在测试时使用django中的会话对象?

我创建了一个包含三个应用程序的小型
django项目,我现在正在为其中一个应用程序编写测试.我需要在不同视图和不同模板之间传递一些信息,但该信息不应该对用户可见.我的第一次尝试是将此信息作为
HTML表单中的隐藏字段传递,但随后我指出这并不能使其完全不可见.所以,我将这些信息存储在request.session字典中,它就可以了.

也就是说,我的问题在测试时出现了.根据django文档(http://docs.djangoproject.com/en/1.2/topics/testing/),在测试期间必须修改会话字典时,应首先将其存储在变量中,修改它,然后保存变量.

所以我的测试代码是这样的:

class Test_Atacar(TestCase):
    fixtures = ["testBase.json"]

    def test_attack_without_troops(self):
        red_player = Player.objects.get(color=RED)
        self.failUnless(red_player != None)
        session = self.client.session
        session["player_id"] = red_player.id
        session.save()
        response = self.client.get("/espectador/sadfxc/", follow=True)

但是当我运行python manage.py测试时,我得到一个AttributeError,说dict没有属性save().
我在其他地方(http://code.djangoproject.com/ticket/11475)读到我应该尝试在操作会话之前对任何其他URL执行self.client.get,以便它将成为“真正的”会话,但是我一直得到相同的AttributeError.

最佳答案 当您在测试期间必须修改会话字典时,应首先将其存储在变量中,修改它,然后保存变量

此行表示如果要对某些会话变量进行某些更改,请不要将它们直接转换为会话.将数据存储在变量中,对该变量进行更改,然后将该变量放入会话字典中. session就像任何其他字典一样.

点赞