2010-11-23 47 views
4

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

这就是说,我的问题出现在测试中。根据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,说是字典,有保存无属性()。 我在其他地方阅读(http://code.djangoproject.com/ticket/11475),我应该尝试对任何其他URL执行self.client.get之前操纵会话,以便它将成为一个“真正”的会话,但我一直得到相同的AttributeError。

回答

2

时,你必须修改会话字典测试,你应该首先将其存储在一个变量中,修改它,然后再保存该变量

这行的意思是,如果你想做出一些改变成一些的会话变量,不要直接进入会话。将数据存储在变量中,对该变量进行更改,然后将该变量放入会话字典中。会话就像任何其他字典。

+0

session.save()不是必需的,并且是无效的。 – 2010-11-23 04:28:01

0

@anand我知道这很奇怪,但它的工作。我不得不做的工作,除了不直接操纵变量是做一个self.client.get(“/哑/”)其中dummy是一个使用虚拟视图的URL。该视图仅修改它作为参数获取的请求的属性。老实说,我不知道幕后发生了什么,使这项工作