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

Rails测试中edit_path使用问题:edit路由测试报错但实际可用

解决Rails控制器测试中Edit路由无法识别id的问题

嘿,这个问题我碰到过!咱们一步一步来理清楚:

问题根源

你在setup方法里用了Adjuster.new创建对象:

def setup
  @adjuster = Adjuster.new(adjuster_name: "TestLastName", address_1: "4511 W 200 S", id: 1)
end

new方法只会在内存中创建对象,不会把它保存到测试数据库里。而你的edit控制器动作(逻辑应该类似def edit; @adjuster = Adjuster.find(params[:id]); end)会尝试从数据库里查找对应id的记录,自然找不到仅存在于内存中的@adjuster,所以抛出了Couldn't find Adjuster with 'id'=1的错误。

至于你的show测试能“正常通过”,其实是个小乌龙:你调用的adjusters_path(@adjuster)是索引路由(对应/adjusters),这个路由不需要id参数,所以不管对象有没有保存,请求都能成功返回。如果你真正想测试单个adjuster的show页面,应该用adjuster_path(@adjuster),这时候如果对象没保存,同样会报错。

解决方案

把setup里的Adjuster.new改成Adjuster.create,这样对象会被保存到测试数据库中:

def setup
  @adjuster = Adjuster.create(adjuster_name: "TestLastName", address_1: "4511 W 200 S")
end

这里不需要手动指定id,Rails会自动为你生成唯一的主键id,手动指定id反而可能引发测试环境中的冲突(比如之前的测试数据没清理干净,id=1已经被占用)。

修改后,edit_adjuster_path(@adjuster)会正确生成类似/adjusters/1/edit的路径,控制器也能从数据库中找到对应的记录,测试就能顺利通过啦!

内容的提问来源于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:28:08