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

使用responses和pytest模拟query_params时视图收不到参数如何解决

问题根源

你当前的测试逻辑存在两个核心问题:

  • 混淆了responses库的作用范围:responses仅用于拦截、模拟你的代码主动向外发起的第三方HTTP请求,无法为你本地Django视图的入参传值
  • 调用Django测试客户端的get方法时,没有携带需要传入的query参数,所以视图自然接收不到对应值

解决方案

根据你的视图实际逻辑二选一即可:

情况1:视图内部不需要主动调用https://test.com接口

直接删除冗余的responses相关代码,在调用client.get时传入参数即可:

def test_receive(self, db, client):
    # 方式1:直接传data参数,Django测试客户端会自动转为GET请求的query参数
    resp = client.get(reverse("my-url"), data={
        "code": "some-code",
        "extra": "extra"
    })
    # 方式2:手动拼接参数到URL后,写法等价
    # resp = client.get(f"{reverse('my-url')}?code=some-code&extra=extra")
    assert resp.status_code == 200

情况2:视图内部确实需要主动调用https://test.com接口

保留responses的mock配置,同时补充测试客户端的传参即可:

@responses.activate
def test_receive(self, db, client):
    # 这部分mock保留,用于拦截视图内部发起的对test.com的请求
    responses.add(
        responses.GET,
        "https://test.com/?code=some-code&extra=extra",
        json={},
        status=200,
        content_type="application/json",
    )
    # 给当前视图的请求传入query参数
    resp = client.get(reverse("my-url"), data={
        "code": "some-code",
        "extra": "extra"
    })
    assert resp.status_code == 200

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.19 02:36:08