2017-12-29 4 views
4

私はdjangoを使って作業しており、ミドルウェアファイルの単体テストケースを作成できる立場にあり、クライアントを使用してレスポンスオブジェクトをチェックすることができるため、ビューは簡単でした。しかし、これはややこしくなってきました。これらの2つの条件文のテストケースを作成するにはどうすればよいですか。ミドルウェアのためのテストケースを作成する方法を確認しながらこのミドルウェアファイル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]) 

、あまりにもhost_name_from_request方法を添付した、私はthis siteを見つけましたが、私はまだ私の場合はそれについて移動する方法について確認していません。

私はこの

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

のようなものを試してみましたが、それはモックオブジェクトは、属性がdjango.testからRequestFactoryクラスを使用してみてください

答えて

1

をget_hostていないと述べました。あなたは '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)) 
に、kwargsからでSERVER_NAMEを渡すことで、それ以外の場合はデフォルトをホストを変更することができます
関連する問題