2016-05-16 8 views
2

Ich habe eine Sackgasse mit einem Django-Web-Projekt, an dem ich gerade arbeite, gefunden und ich kann keine Antworten finden. Ich versuche, eine Ansicht so einfach, wie dies zu testen:Django JsonResponse returning content-type text/html anstelle von application/json

def list(request): 
    return JsonResponse({"foo": "bar"}) 

Es scheint alles gut zu laufen. Wenn ich die Seite in meinem Browser öffne und die Page-Info überprüfe, tippe "Type: application/json".

Allerdings, wenn ich folgende Test auf einem travis ci laufen:

def setUpTestData(cls): 
    cls.client = Client() 
    #A few lines of setting up test-data 

def test_content_type(self): 
    response = self.client.get('/api/list') 
    self.assertEqual(response['content-type'], 'application/json') 

ich folgende Failure erhalten:

FAIL: test_content_type (researchlibrary.api.tests.test_list.ListTests) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/travis/build/FUB-HCC/ACE-Research-Library/researchlibrary/api/tests/test_list.py", line 25, in test_content_type 
    self.assertEqual(response['content-type'], 'application/json') 
AssertionError: 'text/html' != 'application/json' 
- text/html 
+ application/json 

Die Urls sind alle in Ordnung. Der Test erhält die richtige Seite, nur der Typ scheint anstelle von application/json text/html zu sein und ich habe keine Ahnung, warum das so ist.

Hat jemand irgendwelche Ideen, warum dies sein könnte?

BEARBEITEN: das Ändern von self.client.get ('/ api/list') zu self.client.get ('/ api/list /') löste das Problem.

+5

Ich denke, dass Sie den Inhalt der Antwort überprüfen sollten. Es ist möglich, dass Sie anstelle der üblichen Antwort eine Fehlerseite erhalten. –

+0

@LudwikTrammer Sie haben Recht. Die Eingabe der Adresse 'localhost/api/list' gibt die korrekte Antwort zurück, aber irgendwie scheint das bei dem Test nicht der Fall zu sein. Ich habe versucht, es in 'self.client.get ('/ api/list /')' zu ändern, und das hat tatsächlich seinen Zweck erfüllt. Danke: D Ich fühle mich jetzt irgendwie blöd ^^ – Helliaca

+1

@LudwikTrammer Du solltest das als Antwort erstellen. – cwallenpoole

Antwort

1

Es scheint, dass

self.client.get('/api/list') 

zu einem Fehler-Seite geführt (daher der text/html content_type).

EDIT: Keine Fehlerseite, sondern ein http-Redirect, laut LudwikTrammer.

Ändern

self.client.get('/api/list') 

zu

self.client.get('/api/list/') 

löste das Problem.