如何正确地对Django会话进行单元测试?

3 投票
1 回答
1223 浏览
提问于 2025-04-15 21:04

Django的会话(sessions)在正常的视图代码和测试代码中表现得不一样,这让人搞不清楚怎么为会话写测试代码。网上搜索这个问题,找到了两个相关的讨论:

  1. 测试客户端更容易操作会话

  2. test.Client.session.save() 对匿名用户报错

我有点困惑,因为这两个讨论的处理方式不一样,但它们都是被接受的。我猜这意味着它们已经被修复,行为现在有所不同。不过,我也不知道这些修复适用于哪个版本。

如果我在写Django 1.0的单元测试,我该怎么设置我的会话存储,让会话像在浏览器中那样工作呢?

1 个回答

1

我不太明白你说的“标准”视图和“测试”代码之间的行为变化是什么意思,也许你可以详细解释一下。

不过关于如何测试会话,我觉得有一些方法。

  1. 你需要了解Django的会话是怎么工作的,可以看看你在应用中使用的会话包的单元测试。这是关于理解服务器端是如何运作的。
  2. 你可能需要抓取一下浏览器和服务器之间的几次对话(比如使用FIREBUG)。

所以对你来说,问题看起来是你没有把登录时获得的session_id传回服务器,当你和服务器交流时。就像把它放在(POST、GET、COOKIES,我记不太清楚了)。

这里重要的是要理解HTTP中的会话是如何工作的,一旦你明白了,你就能清楚地知道发生了什么,并相应地进行解释。

撰写回答