django - 测试时在 Django 中使用 session 对象?

标签 django testing session request

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

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

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

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) 读到我应该在操作 session 之前尝试对任何其他 URL 执行 self.client.get ,以便它成为一个“真正的” session ,但是我一直收到相同的 AttributeError。

最佳答案

当你在测试期间必须修改 session 字典时,你应该先将它存储在一个变量中,修改它,然后保存变量

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

关于django - 测试时在 Django 中使用 session 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4252133/

相关文章:

python - 获取所有对象 ID 的列表

Django 查询设置为从数据库中获取数据?

javascript - Django 模板标签 {{for/empty}} for 循环变量

testing - 在 TestCafe 中等待 'WebComponentsReady' 事件的最佳方法是什么?

ios - 中断后我是否需要重置 Audio Session 属性?

Django:20 个 html 文件:需要 20 个 TemplateView 和 20 个 URL 模式?

unit-testing - PHPUnit 中的模拟与 stub

linux - 在不同的操作系统中测试程序

django - 在多服务器环境中运行 django 站点 - 如何处理 session ?

python - 异常后的 SQLAlchemy session