Django测试中如何为Client.post传name参数适配视图POST判断逻辑
核心问题定位
你之前的写法混淆了测试Client方法的调用参数和POST请求实际携带的表单数据:
c.post()方法接收到的name="Add"关键字参数,会被测试客户端视为无意义的请求配置,完全不会写入请求体的表单集合- 而视图中
request.POST.get("Add")读取的是请求体里的表单键值对,自然永远取不到值,触发不了对应的加购分支
真实场景下,用户点击
<input type="submit" name="Add" ...>按钮提交表单时,浏览器会自动把这个按钮的name=value作为表单参数追加到POST请求体中——这才是视图能识别到Add参数的根本原因,和Python函数的参数传值逻辑没有关系。
可直接运行的正确代码
直接把提交按钮对应的表单参数写入POST数据字典即可,完全对齐真实页面的提交行为:
# 构造与真实页面提交完全一致的POST表单数据 post_data = { "product": product, "amount": 3, # 将提交按钮的name属性作为键加入字典,值与按钮实际展示的value保持一致 "Add": "Add item to order" } # 无需额外传递方法级别的name参数 response = c.post("/ordersys/orders/create/", post_data)
补充说明
因为你的视图逻辑仅判断Add这个键是否存在,键对应的具体值不会影响分支触发,即使传入空字符串也能正常进入加购逻辑分支。对齐真实页面的传值只是为了让测试场景更贴合线上运行状态,减少测试和实际行为的偏差。
内容的提问来源于stack exchange,提问作者Tasari
相关产品推荐
相关产品推荐

