Django REST TestCase: как получить набор ответных запросов, который не был присвоен атрибуту? - PullRequest
0 голосов
/ 01 октября 2018

Для представления, которое расширяет общий ListAPIView и возвращает набор запросов, просто назначив коллекцию атрибуту View queryset, например, так:

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 и просто могу 'не могу понять, как это сделать, и уже потратил слишком много времени на его поиск ...

1 Ответ

0 голосов
/ 01 октября 2018

Вместо того, чтобы пытаться захватить фактическое QuerySet, которое использовалось для ответа, и написать тест для него, вы должны посмотреть на сам ответ.Поскольку вы пишете API, я предполагаю, что вы хотите утверждать, что JSON содержит правильные данные.

Для django-rest-framework объект Response имеет два атрибута: response.data - это питонсериализованные данные, используемые для рендеринга JSON, тогда как response.content - это сам JSON.

Итак, если у вашего MyModel еще нет объектов, вы можете проверить:

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

или

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