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)
Run Code Online (Sandbox Code Playgroud)
Buf*_*fke 18
从Django 1.7+开始,这就容易多了.确保将会话设置为变量,而不是直接引用它.
def test_something(self):
session = self.client.session
session['somekey'] = 'test'
session.save()
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果您需要在测试中为请求初始化会话以直接操作它:
from django.contrib.sessions.middleware import SessionMiddleware
from django.http import HttpRequest
request = HttpRequest()
middleware = SessionMiddleware()
middleware.process_request(request)
request.session.save()
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9307 次 |
最近记录: |