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



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

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)

最新更新