我用三个应用程序创建了一个小型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。
session.save()不是必需的,并且是无效的。 – 2010-11-23 04:28:01