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

Writing a Django unit test for a function with a HttpResponse

我正在编写一个单元测试来检查 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 发出请求,returns 做出响应,因此完全没有必要直接调用 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']
    ...