首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在url_path中使用参数测试DRF GenericViewSet

在url_path中使用参数测试DRF GenericViewSet
EN

Stack Overflow用户
提问于 2021-07-08 23:35:45
回答 1查看 67关注 0票数 2

我正在尝试使用unittest测试DRF端点。测试下的视图:

代码语言:javascript
运行
AI代码解释
复制
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中的条目

代码语言:javascript
运行
AI代码解释
复制
from rest_framework import routers
router = routers.DefaultRouter()

router.register(r'hw', hw_views.HwView, basename='HwModel')

和测试代码

代码语言:javascript
运行
AI代码解释
复制
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'])

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

代码语言:javascript
运行
AI代码解释
复制
TypeError: switch_state() missing 1 required positional argument: 'switch_id'

此视图中的任何其他方法(不带参数的GET、带参数的POST )都适用于相同的测试方法。

你能帮我找出为什么我的视图不能解析URL中的参数吗?或者任何关于如何重写测试以成功测试代码的建议。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-09 00:10:41

试一试

代码语言:javascript
运行
AI代码解释
复制
response = view(request, switch_id=3)

代码语言:javascript
运行
AI代码解释
复制
response = view(request, {"switch_id": 3})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68309654

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档