我正在尝试使用unittest测试DRF端点。测试下的视图:
class HwView(mixins.ListModelMixin, viewsets.GenericViewSet):
@action(detail=False, methods=['get'], url_path='switch_state/(?P<switch_id>\d+)')
def switch_state(self, request, switch_id):
print(f'sw: {switch_id}')
results = {"state": 'ok'}
return Response(results)
url.py中的条目
from rest_framework import routers
router = routers.DefaultRouter()
router.register(r'hw', hw_views.HwView, basename='HwModel')
和测试代码
from rest_framework.test import APIRequestFactory, APITestCase
class TestCommandProcessor(APITestCase):
def setUp(self):
pass
def test_switch_state(self):
factory = APIRequestFactory()
request = factory.get(
'/api/hw/switch_state/3',
)
view = HwView.as_view({'get': 'switch_state'}, basename='HwModel')
response = view(request)
self.assertIn('state', response.data)
self.assertEqual('ok', response.data['state'])
当我运行测试时,我得到了错误:
TypeError: switch_state() missing 1 required positional argument: 'switch_id'
此视图中的任何其他方法(不带参数的GET、带参数的POST )都适用于相同的测试方法。
你能帮我找出为什么我的视图不能解析URL中的参数吗?或者任何关于如何重写测试以成功测试代码的建议。
发布于 2021-07-09 00:10:41
试一试
response = view(request, switch_id=3)
或
response = view(request, {"switch_id": 3})
https://stackoverflow.com/questions/68309654
复制相似问题