You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用override_settings配置DRF测试路由时遇404,期望获取全部用户接口正常

解决测试用例404错误的方案

问题出在路由配置和请求路径的两处错误,修改如下:

1. 修正Router的注册路径

router.register的第一个参数不需要带末尾斜杠,否则会生成不符合预期的URL规则。把:

router.register('api/', views.UserModelViewSet)

改成:

router.register('api', views.UserModelViewSet)

2. 修正测试中的请求URL

因为测试用的ROOT_URLCONF是当前模块,这里的app_name不会自动作为URL前缀,所以请求路径应该是/api/而不是/frontend/api/。把测试方法里的:

resp = self.client.get('/frontend/api/')

改成:

resp = self.client.get('/api/')

修改后的完整代码

import json

from django.test.utils import override_settings
from django.urls import path, include
from rest_framework import routers

from frontend.tests.mocks import views
from django.test import TestCase


app_name = 'frontend'
router = routers.SimpleRouter()
# 去掉路径末尾的斜杠
router.register('api', views.UserModelViewSet)

urlpatterns = [
    path('', include(router.urls)),
]


@override_settings(ROOT_URLCONF=__name__)
class TestJsonSchemaSerializer(TestCase):  # APITest doesn't work either

    def test_custom_serializer(self):
        # 修正请求路径,去掉frontend前缀
        resp = self.client.get('/api/')
        self.assertEquals(resp.status_code, 200)
        print(resp.status_code, json.dumps(resp.json()))

如果确实需要保留frontend作为URL前缀,那需要在urlpatterns里添加前缀,比如:

urlpatterns = [
    path('frontend/', include(router.urls)),
]

此时测试的请求路径就是/frontend/api/,同时Router注册的路径还是api(不带末尾斜杠)。

内容的提问来源于stack exchange,提问作者KIC

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 23:30:16