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

mku*_*kov 5 python testing django django-rest-framework api-versioning

我之前为我的观点创建了一些测试。像那样

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)
Run Code Online (Sandbox Code Playgroud)

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

DRF 支持本地版本控制http://www.django-rest-framework.org/api-guide/versioning/ 所以我只是使用它并将基于命名空间的版本控制添加到我的 API 中

REST_FRAMEWORK = {
    'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'
}
Run Code Online (Sandbox Code Playgroud)

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

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

from rest_framework.reverse import reverse

reverse('bookings-list', request=request)
Run Code Online (Sandbox Code Playgroud)

就像在文档中一样

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

我该怎么办?

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

Til*_*ter 1

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