我有一个Django单元测试,它创建一个临时数据库并对其应用一些更改。
我还有一个单独的JSON文件,其中包含一个数据版本,表示数据在更改后的外观。
将测试数据上的函数结果与JSON数据集进行比较的最佳推荐方法是什么?
我尝试过使用assertQuerysetEqual()但它似乎并没有起作用。当我做的时候
self.assertQuerysetEqual(
Api.objects.all(),
[repr(record) for record in delete_check_data if record['model'] == 'fim_app.api'],
ordered=False
)
结果是
Traceback (most recent call last):
File "/Users/davidmaness/development/fim_db/fim_app/tests/delete_test.py", line 49, in test_delete
ordered=False
File "/Users/davidmaness/development/fim_db/env/lib/python3.6/site-packages/django/test/testcases.py", line 965, in assertQuerysetEqual
return self.assertEqual(Counter(items), Counter(values), msg=msg)
AssertionError: Counter({'<Api: 2>': 1, '<Api: 3>': 1, '<Api: 4>': 1}) != Counter({"{'model': 'fim_app.api', 'pk': 1, 'field[474 chars]: 1})
我缺少什么?
答案 0 :(得分:1)
一种解决方案是将QuerySet的序列化表示与JSON数据而不是QuerySet本身进行比较。例如,如果您使用Django REST Framework来序列化您的实例,那么您可以使用Django的assertEquals()
执行比较,如下所示:
from rest_framework.renderers import JSONRenderer
from MyApp.models import MyModel
from MyApp.serializers import MyModelSerializer
# perform a HTTP GET request on the API endpoint
api_response = self.client.get('/api/myendpoint/')
# serialize the model instances
serializer = MyModelSerializer(MyModel.objects.all(), many=True)
# convert the serialized data to JSON
result_expected = JSONRenderer().render(serializer.data)
# compare the JSON data returned to what is expected
self.assertEquals(api_response.content, result_expected)