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

标签 python json django unit-testing django-unittest

我正在编写一个单元测试来检查 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/

相关文章:

python - 有人知道 pymongo 中 2dsphere 索引的工作示例吗?

django - 用 AWS 基础设施替代 Celery 和 Redis 是什么?

django - 从 View 中,如何将自定义 "choices"传递到表单的 ChoiceField 中?

python - yield 中的 yield 有什么作用?

python - 检查字典中是否存在键列表

python - 从数据库查询输出创建 JSON 字符串

jquery - 如何在 asp.net 中使用 jQuery UI 自动完成

json - Android Studio Mac OSX : JSON File Size exceeds configured limit (2560000). 代码洞察功能不可用

php - 从Mysql中提取Json php MultilineString坐标

python - 用户在 Django 的哪个位置成为 AnonymousUser?