控制器规格未知关键字:id

Posted

技术标签:

【中文标题】控制器规格未知关键字:id【英文标题】:Controller spec unknown keyword: id 【发布时间】:2017-10-03 11:23:06 【问题描述】:

我有简单的动作表演

def show
  @field = Field.find_by(params[:id])
end

我想为它写规范

require 'spec_helper'

RSpec.describe FieldsController, type: :controller do

    let(:field)  create(:field) 

  it 'should show field' do
    get :show, id: field
    expect(response.status).to eq(200)
  end
end

但我有一个错误

Failure/Error: get :show, id: field

 ArgumentError:
   unknown keyword: id

如何解决?

【问题讨论】:

这就是 Rails 4 的语法。在 Rails 5 及以上版本中,您需要指定“params”关键字。 【参考方案1】:

HTTP 请求方法将只接受以下关键字参数 params, headers, env, xhr, format

根据新的 API,您应该使用关键字参数,在这种情况下 params

  it 'should show field' do
    get :show, params:  id: field.id 
    expect(response.status).to eq(200)
  end

【讨论】:

从 Rails 4.2 升级到 Rails 5.1 后,我开始出现这个错误,这修复了它 - 谢谢! Life Saver :) 但是这个新的 API 是在哪里定义的呢?我找到了this mention,但很高兴看到发生这种变化的地点/时间/原因(如果你知道的话!) 但是在 Rails 6 中我没有找到任何路线匹配

以上是关于控制器规格未知关键字:id的主要内容,如果未能解决你的问题,请参考以下文章

instancetype 和 id 的区别

尝试获取不同值时雪花 JSON 未知关键字错误

GraphicsMagick CgBI 未知关键块

在未知关键帧上平滑停止 CSS 旋转动画

id 和instancetype的区别

RAILS 3.1 - 未知属性:构建时的 id