使用url_路径中的参数测试drf genericviewset

dauxcl2d  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(535)

我正在尝试使用unittest测试drf端点。测试视图:

  1. class HwView(mixins.ListModelMixin, viewsets.GenericViewSet):
  2. @action(detail=False, methods=['get'], url_path='switch_state/(?P<switch_id>\d+)')
  3. def switch_state(self, request, switch_id):
  4. print(f'sw: {switch_id}')
  5. results = {"state": 'ok'}
  6. return Response(results)

url.py中的条目

  1. from rest_framework import routers
  2. router = routers.DefaultRouter()
  3. router.register(r'hw', hw_views.HwView, basename='HwModel')

以及测试代码

  1. from rest_framework.test import APIRequestFactory, APITestCase
  2. class TestCommandProcessor(APITestCase):
  3. def setUp(self):
  4. pass
  5. def test_switch_state(self):
  6. factory = APIRequestFactory()
  7. request = factory.get(
  8. '/api/hw/switch_state/3',
  9. )
  10. view = HwView.as_view({'get': 'switch_state'}, basename='HwModel')
  11. response = view(request)
  12. self.assertIn('state', response.data)
  13. self.assertEqual('ok', response.data['state'])

当我运行测试时,我得到一个错误:

  1. TypeError: switch_state() missing 1 required positional argument: 'switch_id'

此视图中的任何其他方法(get不带参数,post带参数)都可以使用相同的测试方法。
你能帮我找出为什么我的视图不能解析url中的参数吗?或者关于如何重写测试以成功测试代码的任何建议。

axzmvihb

axzmvihb1#

尝试

  1. response = view(request, switch_id=3)

  1. response = view(request, {"switch_id": 3})

相关问题