如何在Django测试中发送查询参数获取指定类型广告?
解决测试中传递查询参数的问题
首先明确:reverse() 只负责生成URL的路径部分,查询参数(即?后面的内容)不属于路由配置范畴,因此不能通过reverse()传递。你需要在self.client.get()方法里单独传入查询参数。
正确写法是把查询参数放在get()方法的data参数中:
response = self.client.get(reverse("ads"), data={"type": "normal"})
也可以直接用关键字参数传递,写法更简洁:
response = self.client.get(reverse("ads"), type="normal")
这两种写法都会自动生成带?type=normal的请求URL,和手动访问http://127.0.0.1:8000/ads/?type=normal的效果完全一致。
你之前尝试的reverse()写法之所以无效,是因为reverse()仅接受路由定义中的路径参数(比如URLconf里的<int:pk>这类),不处理查询参数。
测试验证示例:
# 验证返回普通广告 response = self.client.get(reverse("ads"), type="normal") self.assertContains(response, "普通广告标识内容") # 验证返回高级广告 response = self.client.get(reverse("ads"), type="premium") self.assertContains(response, "高级广告标识内容")
内容的提问来源于stack exchange,提问作者Anicka dlc
相关产品推荐
相关产品推荐

