Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django测试客户端的请求中设置属性_Django_Django Tests - Fatal编程技术网

在Django测试客户端的请求中设置属性

在Django测试客户端的请求中设置属性,django,django-tests,Django,Django Tests,我有一个中间件(tenant_schemas.BaseTenantMiddleware),它将tenant属性注入请求对象。我不能在进行单元测试时使用该中间件 在视图中,我可以从请求中获取租户对象。此视图映射到URL“myapp:member_info” 该视图在项目正常运行时工作,因为中间件将正确设置request.tenant 现在,如果我想测试此视图,我将尝试编写以下测试: class MemberViewTest(TestCase): def setUp(self):

我有一个中间件(tenant_schemas.BaseTenantMiddleware),它将
tenant
属性注入请求对象。我不能在进行单元测试时使用该中间件

在视图中,我可以从请求中获取租户对象。此视图映射到URL“myapp:member_info”

该视图在项目正常运行时工作,因为中间件将正确设置
request.tenant

现在,如果我想测试此视图,我将尝试编写以下测试:

class MemberViewTest(TestCase):
    def setUp(self):
        self.tenant = Tenant(name="test tenant")
        self.member = Member.objects.create(
            first_name='Test',
            last_name='Person')
        
    def test_saldo(self):
        self.client = Client(tenant=self.tenant) # Here I try to inject the tenant into the request
        print(self.client.defaults) # This will print {'tenant': <Tenant: test tenant>}
        response = self.client.get(reverse('myapp:member_info', kwargs={ 'tenant': self.tenant, 'member_id': self.member.token }))
因此,django.tests.Client类没有向请求注入默认值

我尝试的一件事是重写RequestFactory(),以便它将注入租户

class TenantRequestFactory(RequestFactory):
    def request(self, **request):
        req = super().request(**request)
        req.tenant = Tenant()
        print(req)
        return req
        
class TenantClient(Client, TenantRequestFactory):
    pass

views.py
    def test_saldo(self):
        self.client = TenantClient(tenant=self.tenant)

但是从未调用
TenantRequestFactory.request()
(打印命令未命中)。我不知道我是否应该以其他方式将其子类化?在
client.py
中,客户端类是这样创建的:
class client(ClientMixin,RequestFactory)

为什么首先要将属性附加到请求?因为,我没有看到
request.tenant
any的任何用法,其中的视图是
tenant=request.tenant
ctx['tenant\u name']=tenant.name
,它们使用了租户。我省略了将使用
租户名称的模板,因为它不相关。
File "myapp/views.py", line xxx, in get_context_data
    tenant = self.request.tenant
AttributeError: 'WSGIRequest' object has no attribute 'tenant'
class TenantRequestFactory(RequestFactory):
    def request(self, **request):
        req = super().request(**request)
        req.tenant = Tenant()
        print(req)
        return req
        
class TenantClient(Client, TenantRequestFactory):
    pass

views.py
    def test_saldo(self):
        self.client = TenantClient(tenant=self.tenant)