2015-06-18 59 views
1

Django Rest Framework顯示如何test a response當您要測試整個返回的json時,這是可以的。但是,如果我只是想測試,響應包含特定關鍵我想這...如何測試響應包含特定的鍵和值

def test_get_user_shows_count(self): 
      url = reverse('user_list') 
      response = self.api_factory.get(url) 
      self.assertContains(response, {'count': 1}) 

JSON響應

{ 
    'count': 1, 
    'is_active': False, 
    'url': 'http: //testserver/v1/user/95', 
    'id': 95, 
    'display_name': None 
} 

然而,這種失敗,唯一的辦法我可以得到這個工作是把完全例外的JSON,我不想做的。我如何測試以上包含count並僅等於1?

+1

'self.assertContains(response.items(),('count',1))'?或'self.assertEqual(response.get(「count」),1)'? –

+0

@PadraicCunningham沒有assertContains會給一個屬性'status_code'錯誤 – Prometheus

+1

'self.assertEqual(response.content.data.get(「count」),1)'' –

回答

4

如何使用response.data作爲suggested in the docs進行測試。

self.assertEqual(response.data['count'], 1) 

如果你真的想,你可以使用json.loads到返回的JSON轉換回Python字典。但是,所有額外的工作都在測試DRF是否可以將response.data轉換爲JSON,而JSON已經在其他地方進行了測試。

self.assertEqual(json.loads(response.content)['count'], 1) 
+0

這將適用於''assertEqual''而不是''assertContains'',因爲這需要一個status_code。但是,我猜''assertEqual''在這種情況下更好? – Prometheus

+0

好的更新的答案讓感官感謝。 – Prometheus

+0

是的,我在最初的答案中錯誤地使用了'assertContains'。現在修復。 – Alasdair

相關問題