如何为这个中间件文件Django编写合适的单元测试用例?

2024-04-25 09:25:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用django,现在可以为中间件文件编写单元测试用例,视图很容易,因为我可以使用客户机并检查响应对象。但这已经变得有点棘手了。如何为这两个条件语句编写测试用例。你知道吗

def process_request(self, request):
    connection.set_schema_to_public()
    hostname = self.hostname_from_request(request)

    if hostname == settings.MAIN_SITE_HOST_NAME:
        return None
    elif hostname == 'tenant.test.com':
        request.tenant = request.institute = Institute.objects.get(
            domain_url=hostname, schema_name='test')

    connection.set_tenant(request.tenant)
    return None

也附加了来自请求方法的主机名

def hostname_from_request(self, request):
    """ Extracts hostname from request. Used for custom requests filtering.
        By default removes the request's port and common prefixes.
    """
    domain_parts = request.get_host().split('.')
    if len(domain_parts) > 3:
        return remove_www(request.get_host().split(':')[0])
    else:
        return (request.get_host().split(':')[0])

在检查如何为中间件编写测试用例时,我发现了this site,但我仍然不确定如何在我的案例中进行测试。你知道吗

我试过这样的方法

def test_from_client(self):
    self.middleware = InstituteMiddleWare()
    self.request = Mock()
    self.request.path('/')
    self.assertIsNone(self.middleware.process_request(self.request)) 

它说mock对象没有get\u host属性


Tags: 中间件对象fromtestselfhostgetreturn
1条回答
网友
1楼 · 发布于 2024-04-25 09:25:54

尝试从中使用RequestFactory类django.测试. 您可以通过在kwargs中传递服务器名称来修改主机,否则它默认为“testserver”

https://docs.djangoproject.com/en/1.11/topics/testing/advanced/#the-request-factory

from django.test import RequestFactory
def test_from_client(self):
    self.middleware = InstituteMiddleWare()
    self.factory = RequestFactory(SERVER_NAME='tenant.test.com')

    request = self.factory.get("/")
    self.assertIsNone(self.middleware.process_request(request))

相关问题 更多 >