0

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

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

对于这个视图,如何在 TestCase 中检索查询集?

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 新手,只是不知道该怎么做,而且已经浪费了太多时间来寻找它......

4

1 回答 1

1

与其尝试捕获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)
于 2018-10-01T09:46:31.507 回答