Как написать url для тестирования при использовании наборов представлений в Django Restframework

Я действительно не умею тестировать. На самом деле, я не знаю, как написать тестовый url для получения ответа от набора представлений. Вот мои представления,

class AppraisalAPI(viewsets.ReadOnlyModelViewSet):
    queryset = Appraisal.objects.all().order_by('-id')
    serializer_class = AppraisalSerializer

    def get_permissions(self):
        if self.action in ['retrieve']:
            self.permission_classes = [IsHRUser | IsManagementUser]
        elif self.action in ['list']:
            self.permission_classes = [IsUser]
        return super(self.__class__, self).get_permissions()

    def retrieve(self, request, *args, **kwargs):
        instance = self.get_object()
        data = instance.summary()
        return Response(data)

Это мой urls.py,

router = routers.DefaultRouter()
router.register('appraisal', AppraisalAPI)
urlpatterns = [
    path('', include(router.urls)),
]

Это моя тестовая функция,

 def test_appraisal_api_readonly(self):
 url = reverse('appraisal-list')
        self.client = Client(HTTP_AUTHORIZATION='Token ' + token.key)
        resp1 = self.client.get(url, format='json')
        self.assertEqual(resp1.status_code, 200)

Этот тестовый url перешел только в действие list. Когда я указал detail вместо list, он перешел только в действие retrieve. Здесь я хочу получить ответ функции Retrive, Как я могу получить после получения разрешения я хочу получить ответ функции Retrive. Anyhelp Appreciable,...

Поскольку вы используете DefaultRouter, вы можете вызвать действие retrieve с помощью appraisal-detail, и использовать первичный ключ объекта, так:

def test_appraisal_api_readonly(self):
    url = reverse('appraisal-detail', kwargs={'pk': some_pk})
    self.client = Client(HTTP_AUTHORIZATION='Token ' + token.key)
    resp1 = self.client.get(url, format='json')
    self.assertEqual(resp1.status_code, 200)

с some_pk первичным ключом (.pk) некоторого элемента, который вы построите в тесте.

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