nic*_*las 12 testing django session
我想从测试中读取一些会话变量(Django TestCase)
如何以干净的方式做到这一点?
def test_add_docs(self):
    """
    Test add docs
    """
    # I would access to the session here:
    self.request.session['documents_to_share_ids'] = [1]
    response = self.client.get(reverse(self.document_add_view_id, args=[1]), follow=True)
    self.assertEquals(response.status_code, 200)
Buf*_*fke 18
从Django 1.7+开始,这就容易多了.确保将会话设置为变量,而不是直接引用它.
def test_something(self):
    session = self.client.session
    session['somekey'] = 'test'
    session.save()
andreaspelme的解决方法仅在旧版本的django中需要.查看文档
and*_*lme 17
不幸的是,这并不像你希望的那样容易.您可能已经注意到,self.client.session如果您没有调用已为您设置适当会话cookie的会话的其他视图,则直接使用将无效.然后必须手动设置会话存储/ cookie,或通过其他视图设置.
有一个打开的票证可以更容易地模拟与测试客户端的会话:https://code.djangoproject.com/ticket/10899
除了故障单中的解决方法之外,还有一个技巧可以在您使用时使用django.contrib.auth.测试客户端login()方法设置会话存储/ cookie,以便稍后在测试中使用.
如果您有任何其他设置会话的视图,请求它们也可以做到这一点(您可能有另一个视图设置会话,否则您的视图读取会话将非常不可用).
from django.test import TestCase
from django.contrib.auth.models import User
class YourTest(TestCase):
    def test_add_docs(self):
        # If you already have another user, you might want to use it instead
        User.objects.create_superuser('admin', 'foo@foo.com', 'admin')
        # self.client.login sets up self.client.session to be usable
        self.client.login(username='admin', password='admin')
        session = self.client.session
        session['documents_to_share_ids'] = [1]
        session.save()
        response = self.client.get('/')  # request.session['documents_to_share_ids'] will be available
如果您需要在测试中为请求初始化会话以直接操作它:
from django.contrib.sessions.middleware import SessionMiddleware
from django.http import HttpRequest
request = HttpRequest()
middleware = SessionMiddleware()
middleware.process_request(request)
request.session.save()
| 归档时间: | 
 | 
| 查看次数: | 9307 次 | 
| 最近记录: |