Как написать 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
) некоторого элемента, который вы построите в тесте.