python - 使用版本控制 : versioned url retrieval 的 DRF 测试 View

标签 python django testing 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)

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

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

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

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

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

from rest_framework.reverse import reverse

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

就像在docs .

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

我该怎么办?

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

最佳答案

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

关于python - 使用版本控制 : versioned url retrieval 的 DRF 测试 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37034312/

相关文章:

python - 如何在基于类的 View 中进行排序

python - elasticsearch/haystack在服务器重启后不持久

python - nose 在不运行它们的情况下获取测试列表

python - Pandas 在有条件时不返回同一行中的值

python - 如何在特定范围内增加列表中的值

python - 我的 "library sort"实现的经验复杂度似乎与 O(n log n) 之类的不匹配

ruby-on-rails - Cucumber table.diff 说表不相同 - Rails

python - python请求超时。获取整个响应

django - 学习 django 有哪些互动资源?

android - 多次运行 JUnit 测试会给出不同的结果