2017-03-14 3 views
0

Ich versuche Einheit Testfall für eine externe Facing API meiner Django-Anwendung zu schreiben. Ich habe ein Modell namens Dummy mit zwei Feldern temp und content. Die folgende Funktion wird von Dritten aufgerufen, um das Feld content abzurufen. temp ist ein indizierter eindeutiger Schlüssel.Unit-Test eine externe Facing-Funktion

@csrf_exempt 
def fetch_dummy_content(request): 
    try: 
     temp = request.GET.get("temp") 
     dummy_obj = Dummy.objects.get(temp=temp) 
    except Dummy.DoesNotExist: 
     content = 'Object not found.' 
    else: 
     content = dummy_obj.content 

    return HttpResponse(content, content_type='text/plain') 

Ich habe die folgenden Einheit Testfall.

def test_dummy_content(self): 
    params = { 
     'temp': 'abc' 
    } 
    dummy_obj = mommy.make(
     'Dummy', 
     temp='abc', 
     content='Hello World' 
    ) 
    response = self.client.get(
     '/fetch_dummy_content/', 
     params=params 
    ) 
    self.assertEqual(response.status_code, 200) 
    self.assertEqual(response.content, 'Hello World') 

Jedes Mal, wenn ich den Testfall laufen, geht es in exception und gibt Object not found. statt Hello World. Nach weiteren Debugging habe ich festgestellt, dass temp von Anfrage Objekt innerhalb Ansicht Funktion immer None ist, obwohl ich es in params übergeben.

Ich könnte etwas vermissen und nicht in der Lage, herauszufinden. Was ist der richtige Weg, um diese Art von Funktionen zu testen?

Antwort

1

There's no params parameter for the get oder eine der anderen Funktionen auf dem Client, denken Sie wahrscheinlich an data.

response = self.client.get(
    '/fetch_dummy_content/', 
    data=params 
) 

Es ist das zweite Argument trotzdem, so dass Sie nur self.client.get('/fetch_dummy_content/', params) tun zu können.

Alle unbekannten Parameter werden in die Umgebung aufgenommen, was erklärt, warum bei der Verwendung des falschen Namens kein Fehler angezeigt wurde.

+0

Vielen Dank, Alter. – Pattu