在我的unittest中,我需要在会话中添加一个变量,因为该变量在正在测试的视图中使用。 django文档说明这可以通过以下方式实现(https://docs.djangoproject.com/en/1.3/topics/testing/#django.test.client.Client.session):
def test_something(self):
session = self.client.session
session['somekey'] = 'test'
session.save()
此代码示例实际上不起作用,因为您将收到dict没有函数save的错误。我还尝试了各种其他方法来更改会话dict中的内容,但还没有找到改变它的方法。 我知道这意味着什么,我得到的是一个dict对象,所以它没有保存功能。但是在添加密钥时会话dict也不会更新。
使用self.client.session时的文档状态应该返回SessionStore对象而不是字典。
答案 0 :(得分:0)
现在看来Django中存在一个错误,因此对于未经身份验证的用户来说,它不适用于更改会话。这是相应的票证:https://code.djangoproject.com/ticket/11475。
解决方法是创建一个虚拟视图,在该视图中设置会话变量并使用Client.get('url_of_dummy_view')调用该视图。
答案 1 :(得分:0)
@Sam Stoelinga引用的故障单已作为副本关闭。可以找到相应的票证here。
要保存会话数据,您必须使用经过身份验证的用户。我找到了解决方案here。
class BlogAdminTestCase(TestCase):
def setUp(self):
# Setup Test User
User.objects.create_user(
username='foo',
password='bar'
)
# Must login to modify session variables
self.client.login(username='foo', password='bar')
s = self.client.session
s['my_session_variable'] = 'Yay!'
s.save()