gpt4 book ai didi

python - 如何使用 Django 的 assertJSONEqual 来验证 View 返回 JsonResponse 的响应

转载 作者:IT老高 更新时间:2023-10-28 20:59:05 26 4
gpt4 key购买 nike

我正在使用 Python 3.4 和 Django 1.7。我有一个 View 返回 JsonResponse .

def add_item_to_collection(request):
#(...)
return JsonResponse({'status':'success'})

我想验证该 View 是否使用单元测试返回正确的响应:

class AddItemToCollectionTest(TestCase):

def test_success_when_not_added_before(self):
response = self.client.post('/add-item-to-collection')
self.assertEqual(response.status_code, 200)
self.assertJSONEqual(response.content, {'status': 'success'})

但是 assertJSONEqual() 行会引发异常:

Error
Traceback (most recent call last):
File "E:\Projects\collecthub\app\collecthub\collecting\tests.py", line 148, in test_success_when_added_before
self.assertJSONEqual(response.content, {'status': 'OK'})
File "E:\Projects\collecthub\venv\lib\site-packages\django\test\testcases.py", line 675, in assertJSONEqual
data = json.loads(raw)
File "C:\Python34\Lib\json\__init__.py", line 312, in loads
s.__class__.__name__))
TypeError: the JSON object must be str, not 'bytes'

当响应包含 JSON 时,检查响应内容的正确方法是什么?当我尝试将原始值与 assertJSONEqual() 中的 dict 进行比较时,为什么会出现类型错误?

最佳答案

看起来您正在使用 Python 3,因此您需要将 response.content 转换为 UTF-8 编码字符串,然后再将其传递给 self.assertJSONEqual:

class AddItemToCollectionTest(TestCase):

def test_success_when_not_added_before(self):
response = self.client.post('/add-item-to-collection')
self.assertEqual(response.status_code, 200)
self.assertJSONEqual(
str(response.content, encoding='utf8'),
{'status': 'success'}
)

如果您想同时支持 Python 2.7 和 Python 3,请使用 django ships withsix 兼容性库:

from __future__ import unicode_literals
from django.utils import six

class AddItemToCollectionTest(TestCase):

def test_success_when_not_added_before(self):
response = self.client.post('/add-item-to-collection')
self.assertEqual(response.status_code, 200)

response_content = response.content
if six.PY3:
response_content = str(response_content, encoding='utf8')

self.assertJSONEqual(
response_content,
{'status': 'success'}
)

关于python - 如何使用 Django 的 assertJSONEqual 来验证 View 返回 JsonResponse 的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27472663/

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