对于扩展泛型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)