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)
对于通过简单地将集合分配给视图 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)