Url не обрабатывается при тестировании набора ModelViewSet

Я пытаюсь протестировать представление Django Rest Framework. Когда я вызываю свою конечную точку из реального api клиента, pk устанавливается правильно. Когда я вызываю его из теста, pk равен None.

class ResourceViewSet(ModelViewSet):
    serializer_class = ResourceSerializer

    @action(detail=True)
    def foo(self, request, pk=None):
        print(pk) # None when called by the test


def test_foo(client: Client, db):
    request = factory.post(f'/api/resource/1/foo/')
    view = ResourceViewSet.as_view({'post': 'foo'})
    response = view(request)

Как я должен исправить свой тест?

При тестировании представления напрямую, как вы это делаете, вы обходите логику преобразования/сопоставления url. Поэтому вы должны передавать параметры как args/kwargs, в итоге вы вызываете функцию foo:

def test_foo(client: Client, db):
    request = factory.post(f'/api/resource/1/foo/')
    view = ResourceViewSet.as_view({'post': 'foo'})
    response = view(request, pk=1)

Если вы хотите протестировать весь стек, а также урлы, я бы рекомендовал вам использовать APIClient.

Вернуться на верх