Django REST TestCase:如何检索未分配给属性的响应查询集?

Django REST TestCase: How to retrieve a response queryset that wasn't assigned to an attribute?

对于通过简单地将集合分配给视图 queryset 属性来扩展通用 ListAPIView 和 returns 查询集的视图,如下所示:

class MyView(ListAPIView):
   queryset = MyModel.objects.all()

如何在该视图的测试用例中检索查询集?

def test_my_view(self):
    request = self.factory.get('my/url') # self.factory was set in the setUp method
    response = MyView.as_view()(request)
    self.assertEqual(response.status_code, 200)
    # I'd like to now test the query set, something like
    # self.assertQuerysetEqual(response.queryset, [])

我发现在分配给属性的查询集上,检索查询集的方法是这样的:

response.context['queryset_attribute_name']

但我希望我的视图充当前端的简单 REST 端点,而不向其添加属性名称。

这似乎是一件很简单的事情,但我是 Django 的新手,只是不知道该怎么做,并且已经浪费了太多时间来寻找它...

与其尝试捕获用于响应的实际 QuerySet 并为其编写测试,不如查看响应本身。因为你正在写一个 API 我假设你想断言 JSON 包含正确的数据。

对于django-rest-framework,一个Response对象有两个属性:response.data是用来渲染JSON的python序列化数据,而response.content 是 JSON 本身。

因此,如果您的 MyModel 还没有任何对象,您可以测试:

self.assertEqual(0, len(response.data))

self.assertEqual("[]", response.content)