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

Rails自动化测试删除方法报错:No route matches [DELETE] '/adjusters/1/edit'

问题原因与解决方案

你的测试失败的核心原因是使用了错误的路径助手来发送DELETE请求,具体拆解如下:

  • edit_adjuster_path(@adjuster) 对应的是GET请求的编辑页面路由(/adjusters/1/edit),这个路由只支持GET方法,完全不接受DELETE请求,所以才会抛出No route matches [DELETE] '/adjusters/1/edit'的错误。
  • 而删除动作(destroy)对应的RESTful路由是DELETE /adjusters/:id,对应的路径助手是adjuster_path(@adjuster),正好匹配你通过rake routes查到的规则:DELETE /adjusters/:id(.:format) adjusters#destroy。

另外还有个小细节需要修正:assert_nil(@adjuster) 无法验证对象是否真的从数据库中被删除——因为@adjuster是内存中的对象,哪怕数据库里的记录被删除,这个内存对象依然存在。你需要直接检查数据库中是否还存在该记录。

修正后的测试代码

# 创建测试用的实例变量
def setup
  @adjuster = Adjuster.create(adjuster_name: "TestLastName", address_1: "4511 W 200 S", id: 1)
end

# 测试删除已创建的调整器
test "delete adjuster" do
  # 使用正确的路径助手发送DELETE请求
  delete adjuster_path(@adjuster)
  follow_redirect!
  # 验证数据库中已不存在该记录
  assert_not Adjuster.exists?(@adjuster.id)
end

补充说明

你之前用get edit_adjuster_path(@adjuster)能成功完成更新,是因为编辑页面的路由本身就对应GET方法,请求方法和路由规则匹配,所以没有问题。而RESTful设计中,删除动作是对单个资源(/adjusters/:id)发送DELETE请求,和编辑页面的路由是完全独立的两个规则,不能混用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:33:43