我正在编写一个单元测试,以检查电视广播键是否在此函数中返回的JSON数据中(在我的views.py中):
def my_function(request, date1='', date2='', date3='', date4=''):
::some other functions...::
return HttpResponse(data, content_type='application/json')
如您所见,我要检查的JSON是通过HttpResponse发送的变量数据
此JSON数据在前端收到时的结构如下:
{"records": [ {"program": "WWE ENTERTAINMENT", "telecasts": 201,...}, {..} ]
所以这就是我尝试编写单元测试的方法,但是当我运行它时出现错误:
def my_test(self):
"""Data returned has telecasts key"""
request = self.client.get(
'/apps/myapp/2014-08-01/2015-06-10/2016-01-13/2016-03-23/',
{dictionary of optional parameters}
)
force_authenticate(request, user=self.user)
response = my_function(
request,
'2014-08-01',
'2015-06-10',
'2016-01-13',
'2016-03-23'
)
telecasts_check = response['records'][0]['telecasts']
self.assertRaises(KeyError, lambda: telecasts_check)
答案 0 :(得分:2)
self.client.get
发出请求并返回响应,因此完全没必要直接调用myfunction
来获取下面的响应。
另一件事是,HttpResponse
有一个名为content
的属性,它可以是一个bytestring或一个存储响应内容的迭代器。
在您的情况下,您可以使用json.loads
将其转换为字典,并访问您正在执行的任何值:
import json
def my_test(self):
...
response = self.client.get(...)
result = json.loads(response.content)
telecasts_check = result['records'][0]['telecasts']
...