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.