【发布时间】:2022-01-17 21:36:29
【问题描述】:
我正在尝试为我的自定义中间件创建测试类。该项目使用 Django REST 框架。中间件类在服务器运行时工作正常,但是当我运行测试时,它的行为并不像我期望的那样。也许我误解了一些东西,因为我对在 Django 中进行测试很陌生。
my_middleware.py:
class FX:
a = False
b = None
c = ''
def __init__(self) -> None:
pass
def __str__(self):
return 'fx ok'
class MyMiddleware(object):
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
request.fx = FX()
response = self.get_response(request)
print('done')
return response
views.py:
class TestView(APIView):
def get(self, request, format=None):
print('View ok')
print('FX: ', request.fx)
return Response({'result':'ok'})
tests.py:
class TestMyMiddleware(APITestCase):
@classmethod
def setUpTestData(cls):
pass
def setUp(self):
pass
def test_fx(self):
response = self.client.get(reverse('TestView'), content_type="application/json")
request = response.request
self.assertTrue(hasattr(request, 'fx'))
上面的代码实际上运行了中间件。它从中间件调用打印“完成”,然后打印“查看正常”并打印 FX 实例。但是 test_fx 方法中没有 request.fx ,因此断言失败:
self.assertTrue(hasattr(request, 'fx'))
AssertionError: False is not true
知道我做错了什么吗?
【问题讨论】:
-
您是否使用不同的
settings.py进行测试? -
没有。测试和运行服务器的设置是一样的。
标签: django django-rest-framework django-testing django-tests