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

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

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

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

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

1
2
3
4
5
6
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, [])

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

1
response.context['queryset_attribute_name']

但我希望我的视图像前端的一个简单的REST端点一样工作,而不向其添加属性名。

这似乎是一件很简单的事情,但我对姜戈不熟悉,只是不知道该怎么做,已经浪费了太多的时间来寻找它…


不要试图捕获用于响应的实际QuerySet并为其编写测试,而应该查看响应本身。因为您正在编写API,所以我假设您希望断言JSON包含正确的数据。

对于django rest框架,Response对象有两个属性:response.data是用于呈现json的python串行数据,而response.content是json本身。

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

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

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