use*_*968 2 django django-testing django-tests
我正在RequestFactoryDjango 测试中使用,但找不到访问会话变量的正确方法,并且在尝试self.factory._session["zip_id"]或时出现以下错误
self.factory.session["zip_id"]。
======================================================================
ERROR: test_middleware (dj_geo.tests.IPToZipMiddleWareTest)
----------------------------------------------------------------------
Traceback (most recent call last):
File "c:\dj_site_test\dj_geo\tests.py", line 36, in test_middleware
assert self.factory._session["zip_id"] != None
AttributeError: 'RequestFactory' object has no attribute '_session'
----------------------------------------------------------------------
@override_settings(MIDDLEWARE_CLASSES=(
'dj_geo.middleware.IPToZipMiddleWare'
))
class IPToZipMiddleWareTest(TestCase):
def test_middleware(self):
Zipcode.syncdb()
assert Zipcode.objects.all().count() > 0
self.factory = RequestFactory()
self.request = self.factory.get('/', {}, **{'REMOTE_ADDR':'108.31.178.99'})
assert self.factory._session["zip_id"] != None
assert self.factory._session["zip_id"] != ""
Run Code Online (Sandbox Code Playgroud)
小智 7
保存会话信息以使用您的中间件请求
from django.contrib.sessions.middleware import SessionMiddleware
request = RequestFactory().get('/')
middleware = SessionMiddleware()
middleware.process_request(request)
request.session.save()
Run Code Online (Sandbox Code Playgroud)
小智 6
您确实可以使用 SessionMiddleware。但是,与任何中间件一样,它的构造函数需要回调。回调由 Django 运行时提供,以便继续处理中间件链或在链到达末尾时立即执行视图。由于我们对视图执行不感兴趣,对于这种情况,您可以执行以下操作:
from django.contrib.sessions.middleware import SessionMiddleware
request = RequestFactory().get('/')
middleware = SessionMiddleware(lambda x: None)
middleware.process_request(request)
request.session.save()
Run Code Online (Sandbox Code Playgroud)
通过处理请求,会话字段将添加到其中,您可以继续进行测试。
Sar*_*iev -1
你需要Client为此使用而不是RequestFactory
self.factory = Client()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1467 次 |
| 最近记录: |