在 Django Rest Framework 中使用视图集时如何编写 url 进行测试

How to write url for testing when using viewsets in 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 仅进入列表操作。当我提供详细信息而不是列表时,它只会检索操作。 在这里,我想获得 Retrive 函数响应,在获得权限后如何获得我想接收 retrive 函数响应。 Anyhelp 可观的,..

因为你使用了DefaultRouter,你可以用appraisal-detail触发retrieve动作,并且使用对象的主键,所以:

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

with some_pk 你在测试中构建的一些项目的主键(.pk)。