Django REST - 如何制作一个测试用例来检查方法是否被允许?
Django REST - How to make a test case that checks that a method is not allowed?
我有以下模型视图集:
class OrderViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
我想创建四个测试用例:
- 检查是否不允许通过 OrderViewSet 进行(部分)更新
- 检查是否不允许通过 OrderViewSet
- 检查是否不允许通过 OrderViewSet 进行检索
- 通过 OrderViewSet 检查是否不允许删除
我面临几个问题。首先,我无法对所有测试用例使用 reverse() 。以下测试用例有效:
def test_disable_read_order_list(self):
response = self.client.get(reverse('api:orders-list', kwargs={'currency': 'eur'}))
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
当我尝试使用 reverse 获取详细路线的 URL 时:
reverse('api:orders-detail', kwargs={'currency': 'eur', 'pk': self.order.id})
我得到:
django.urls.exceptions.NoReverseMatch: Reverse for 'orders-detail' not found. 'orders-detail' is not a valid view function or pattern name.
我试图通过调整用于工作测试用例的 URL 来解决这个问题:
def test_disable_read_order_detail(self):
response = self.client.get(reverse('api:orders-list', kwargs={'currency': 'eur'}) + str(self.order.id) + '/')
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
但由于某种原因返回了状态码 200。
实现我想要的单元测试的正确方法是什么?
django.urls.exceptions.NoReverseMatch: Reverse for 'orders-detail' not found. 'orders-detail' is not a valid view function or pattern name.
是 OrderViewSet
实现方式的结果。
它源自 mixins.CreateModelMixin
和 viewsets.GenericViewSet
,因此可以创建订单,但除此之外别无他法(这就是 test_disable_read_order_list
通过的原因)。
您应该得到 404 Not Found
,除非 OrderViewSet
继承自 mixins.RetrieveModelMixin
,当您尝试请求订单详细信息时(例如 /orders/1/
),因此您很奇怪在 test_disable_read_order_detail
.
中获得 200 OK
我有以下模型视图集:
class OrderViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
我想创建四个测试用例:
- 检查是否不允许通过 OrderViewSet 进行(部分)更新
- 检查是否不允许通过 OrderViewSet
- 检查是否不允许通过 OrderViewSet 进行检索
- 通过 OrderViewSet 检查是否不允许删除
我面临几个问题。首先,我无法对所有测试用例使用 reverse() 。以下测试用例有效:
def test_disable_read_order_list(self):
response = self.client.get(reverse('api:orders-list', kwargs={'currency': 'eur'}))
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
当我尝试使用 reverse 获取详细路线的 URL 时:
reverse('api:orders-detail', kwargs={'currency': 'eur', 'pk': self.order.id})
我得到:
django.urls.exceptions.NoReverseMatch: Reverse for 'orders-detail' not found. 'orders-detail' is not a valid view function or pattern name.
我试图通过调整用于工作测试用例的 URL 来解决这个问题:
def test_disable_read_order_detail(self):
response = self.client.get(reverse('api:orders-list', kwargs={'currency': 'eur'}) + str(self.order.id) + '/')
self.assertEqual(response.status_code, status.HTTP_405_METHOD_NOT_ALLOWED)
但由于某种原因返回了状态码 200。
实现我想要的单元测试的正确方法是什么?
django.urls.exceptions.NoReverseMatch: Reverse for 'orders-detail' not found. 'orders-detail' is not a valid view function or pattern name.
是 OrderViewSet
实现方式的结果。
它源自 mixins.CreateModelMixin
和 viewsets.GenericViewSet
,因此可以创建订单,但除此之外别无他法(这就是 test_disable_read_order_list
通过的原因)。
您应该得到 404 Not Found
,除非 OrderViewSet
继承自 mixins.RetrieveModelMixin
,当您尝试请求订单详细信息时(例如 /orders/1/
),因此您很奇怪在 test_disable_read_order_detail
.
200 OK