【问题标题】:How to write url for testing when using viewsets in Django Restframework在 Django Rest Framework 中使用视图集时如何编写用于测试的 url
【发布时间】:2022-01-08 17:49:02
【问题描述】:

我真的不适合测试。实际上,我不知道如何编写测试 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)

此测试网址仅进入列表操作。当我给出详细信息而不是列表时,它只会检索动作。 在这里,我想获得 Retrive 函数响应,我如何在获得许可后获得 Retrive 函数响应。 Anyhelp 可观的,..

【问题讨论】:

    标签: django unit-testing django-rest-framework


    【解决方案1】:

    由于你使用DefaultRouter,你可以用appraisal-detail触发retrieve动作,并使用对象的主键,所以:

    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)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-10
      • 2014-09-14
      • 2021-12-21
      • 1970-01-01
      • 2022-11-01
      • 1970-01-01
      • 2016-11-27
      • 1970-01-01
      相关资源
      最近更新 更多