【问题标题】:Django Middleware does not modify request in testsDjango Middleware 不会在测试中修改请求
【发布时间】: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


【解决方案1】:

您需要使用response.wsgi_request 而不是response.request 从响应中访问请求对象。

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.wsgi_request
        self.assertTrue(hasattr(request, 'fx'))

【讨论】:

  • 嗯......这就像一个魅力。非常感谢。
猜你喜欢
  • 1970-01-01
  • 2021-08-18
  • 1970-01-01
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2018-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多