[英]DRF testing views with versioning: versioned url retrieval
I created some tests for my views before. 我之前为我的观点创建了一些测试。 Like that 像那样
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)
Everything worked great, until I was asked to add API versioning. 一切都很顺利,直到我被要求添加API版本。
DRF supports versioning natively http://www.django-rest-framework.org/api-guide/versioning/ so I just went with it and added namespace-based versioning to my APIs with DRF本身支持版本控制http://www.django-rest-framework.org/api-guide/versioning/所以我只是使用它并将基于命名空间的版本控制添加到我的API中
REST_FRAMEWORK = {
'DEFAULT_VERSIONING_CLASS': 'rest_framework.versioning.NamespaceVersioning'
}
Now I need to rewrite my views unit tests to support versioning. 现在我需要重写我的视图单元测试以支持版本控制。
This problem is that in order to get versioned url through reverse
, I have to use 这个问题是为了通过reverse
获取版本化的url,我必须使用
from rest_framework.reverse import reverse
reverse('bookings-list', request=request)
But I don't have a request
objects in the tests, as I'm making one myself and versioned url required for making it. 但是我在测试中没有request
对象,因为我自己创建了一个request
对象并且需要使用版本化的url。
What should I do? 我该怎么办?
PS I can implement versioning without using DRF one, with view decorator and a couple of utils functions and solve this problem, but it feels bad for me as I'm reinventing the wheel. PS我可以在不使用DRF的情况下实现版本控制,使用视图装饰器和几个utils函数来解决这个问题,但是当我重新发明轮子时,这对我来说感觉不好。 Also, I might forget some edge cases too. 另外,我也可能会忘记一些边缘情况。
我在我的测试用例中使用了reverse('<VERSION>:<VIEW_NAME>')
。
很晚但是对于那些有类似问题的人,你可以在调用视图的同时传递版本 -
response = CustomUserAPIView.as_view()(request, version='1.0')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.