gpt4 book ai didi

python - 使用 HttpResponse 为函数编写 Django 单元测试

转载 作者:行者123 更新时间:2023-12-04 02:01:20 27 4
gpt4 key购买 nike

我正在编写一个单元测试来检查 telecasts 键是否在此函数返回的 JSON 数据中(在我的 views.py 中):

def my_function(request, date1='', date2='', date3='', date4=''):
::some other functions...::
return HttpResponse(data, content_type='application/json')

如您所见,我要检查的 JSON 是通过 HttpResponse 作为变量 data

发送的

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

最佳答案

self.client.get 发出请求并返回响应,因此完全没有必要直接调用 myfunction 来获取下面的响应。

另一件事是,HttpResponse 有一个名为 content 的属性它可以是字节串或存储响应内容的迭代器。

在您的情况下,您可以使用 json.loads 将其转换为字典并像您已经在做的那样访问任何值:

import json

def my_test(self):
...
response = self.client.get(...)
result = json.loads(response.content)
telecasts_check = result['records'][0]['telecasts']
...

关于python - 使用 HttpResponse 为函数编写 Django 单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47062227/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com