2016-05-16 108 views
2

我已經打了一個django web項目的死衚衕,我正在努力,我似乎​​無法找到任何答案。 我想測試這麼簡單一個觀點:Django JsonResponse返回內容類型的文本/ HTML而不是應用程序/ JSON

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

它似乎運行都好。如果我在瀏覽器上打開網站並檢查頁面信息,它會顯示「類型:application/json」。

然而,當我運行下面的一個詞特拉維斯測試:

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') 

我獲得以下故障:

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 

的URL無一不精。測試收到正確的頁面,只是類型看起來是text/html而不是application/json,我不知道爲什麼。

有人有任何想法,爲什麼這可能是?編輯:將self.client.get('/ api/list')改爲self.client.get('/ api/list /')解決了這個問題。

+5

我想你應該檢查響應的內容。您可能會收到一個錯誤頁面,而不是通常的響應。 –

+0

@LudwikTrammer你說得對。輸入地址'localhost/api/list'會返回正確的響應,但不知何故,測試似乎不是這種情況。我嘗試將其更改爲'self.client.get('/ api/list /')',而且確實做了這項工作。謝謝:D我現在覺得有點愚蠢^^ – Helliaca

+1

@LudwikTrammer你應該創建一個答案。 – cwallenpoole

回答

1

看來,

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

導致一個錯誤頁面(因此text/html的CONTENT_TYPE)。

編輯:根據LudwikTrammer,不是錯誤頁面,而是http重定向。

改變

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

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

解決的問題。

相關問題