带有版本控制的 DRF 测试视图:版本化 url 检索

Posted

技术标签:

【中文标题】带有版本控制的 DRF 测试视图:版本化 url 检索【英文标题】:DRF testing views with versioning: versioned url retrieval 【发布时间】:2016-08-30 06:43:19 【问题描述】:

我之前为我的视图创建了一些测试。就这样

class TestUserRegistrationViewUserCreate(APITestCase):
def setUp(self):
    self.factory = APIRequestFactory()

def test_create_user(self):
    data = 
        'phone_number': '+79513332211',
        'password': 'qwerty'
    
    request = self.factory.post(reverse('user'), data=data)
    response = CustomUserAPIView.as_view()(request)
    self.assertEqual(response.status_code, status.HTTP_201_CREATED)

一切都很好,直到我被要求添加 API 版本控制。

DRF 原生支持版本控制http://www.django-rest-framework.org/api-guide/versioning/ 所以我只是使用它并使用

向我的 API 添加了基于名称空间的版本控制
REST_FRAMEWORK = 
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'

现在我需要重写我的视图单元测试以支持版本控制。

这个问题是为了通过reverse获取版本化的url,我必须使用

from rest_framework.reverse import reverse

reverse('bookings-list', request=request)

喜欢docs。

但我在测试中没有 request 对象,因为我自己制作了一个,并且制作它需要版本化的 url。

我该怎么办?

附:我可以在不使用 DRF 的情况下实现版本控制,使用视图装饰器和几个 utils 函数来解决这个问题,但是我在重新发明***时感觉很糟糕。另外,我也可能会忘记一些边缘情况。

【问题讨论】:

【参考方案1】:

我在测试用例中使用reverse('<VERSION>:<VIEW_NAME>')

【讨论】:

【参考方案2】:

很晚了,但对于那些有类似问题的人,您可以在调用视图时传递版本 -

response = CustomUserAPIView.as_view()(request, version='1.0')

【讨论】:

以上是关于带有版本控制的 DRF 测试视图:版本化 url 检索的主要内容,如果未能解决你的问题,请参考以下文章

Django框架深入了解_04(DRF之url控制解析器响应器版本控制分页)

drf版本控制 django缓存

DRF版本控制组件

DRF 版本 认证

DRF 版本 认证

DRF--路由组件和版本控制