[英]DRF Response content-type set to None during tests
我正在使用Django Rest Framework(版本3.6.2)創建REST API。 我定義了從GenericViewSet
繼承的GenericViewSet
,並重寫了實現自定義行為的retrieve
方法。
class FooViewSet(viewsets.GenericViewSet):
serializer_class = FooSerializer
def retrieve(self, request, *args, **kwargs):
...
serializer = self.get_serializer(data)
return Response(serializer.data)
我想在從瀏覽器訪問此端點時擁有BrowsableAPI,並在從代碼訪問該端點時接收json
響應。 我已使用以下設置配置了DRF:
REST_FRAMEWORK = {
'DEFAULT_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
'rest_framework.renderers.BrowsableAPIRenderer',
),
'TEST_REQUEST_RENDERER_CLASSES': (
'rest_framework.renderers.JSONRenderer',
),
'TEST_REQUEST_DEFAULT_FORMAT':'json'
}
一切正常,我可以從瀏覽器訪問可瀏覽的API,使用Postman工具發出請求時,我會得到json響應。 不幸的是,在測試期間我無法獲得相同的結果。
class GetFooDetailViewTest(APITestCase):
def test_get_should_return_json(self):
response = self.client.get(self.VIEW_URL)
self.assertEqual(response.content_type, "application/json")
我希望響應將content_type設置為application/json
(這是我可以在瀏覽器和Postman的響應中看到的標頭)。 但是此測試失敗response.content_type
設置為None
。 在調試該測試時,我發現response._headers
詞典如下所示
{
'vary': ('Vary', 'Cookie'),
'x-frame-options': ('X-Frame-Options', 'SAMEORIGIN'),
'content-type': ('Content-Type', 'application/json'),
'allow': ('Allow', 'GET, PUT, DELETE, OPTIONS')
}
因此,似乎設置了正確的標頭,但並未填充到content_type
屬性中。 我想念什么嗎?
這就是我測試內容類型的方法。 在極少數情況下,我的代碼決定內容類型本身,因此,我檢查自己個人沒有做錯什么。 DRF代碼已經過測試。
self.assertEqual("application/json", resp['Content-Type'])
您只需要依靠DRF正確地執行它,這不是您可以測試或不需要測試的事情。 例如,您沒有測試DRF是否正確解析了json主體。 測試服務器與真正的服務器並不完全相同,但是非常接近。 例如,您將從response.data中獲取真實對象,而不是json編碼/解碼對象。
如果需要,請簽出LiveServerTestCase ,但是它會變慢。
我遇到了類似的情況,這對我有用:
response = self.client.get(self.VIEW_URL, HTTP_ACCEPT='application/json')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.