在DRF中测试API端点-通过名称访问特定的URL?

时间:2019-04-24 18:16:13

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

我有一个具有以下结构的项目:

  • 项目
    • app1
    • app2

每个应用程序都使用django rest框架。

我的项目urls.py文件如下:

import app1.rest_api

urlpatterns = [
    path('admin/', admin.site.urls),
    path('app2/', include('app2.urls')),
    path('app1/', include('app1.urls')),
    path('api/app1/', include(
        app1.rest_api.router.urls)),

在我的rest_api.py文件中,我设置了以下路由:

router = routers.DefaultRouter()
router.register(r'myspecificmodel',
                MySpecificModelViewSet, base_name='MySpecificModels')
router.register(r'myothermodels', MyOtherModelsViewSet,
                base_name='MyOtherModels')

我在test_api.py目录中有一个app1/tests文件,如下所示:

from rest_framework import status
from rest_framework.test import APITestCase, APIClient


class URLTest(APITestCase):
    def setUp(self):
        self.client = APIClient()

    def test_url_returns_200(self):
        url = '/api/app1/myspecificmodels'
        response = self.client.get(url)
        # response = self.client.get(url, format='json')
        self.assertEqual(response.status_code, status.HTTP_200_OK)
        self.assertEqual(len(response.data), 1)

这给我一个301 ResponsePermanentRedirect

如何最好地测试该API端点?有没有一种方法可以命名路由并使用reverse进行测试,因为这样可能会更容易一些?

1 个答案:

答案 0 :(得分:1)

遵循重定向链直到结尾:

response = self.client.get(url, follow=True)

参考:Test tools, Making requests