Controller spec未知关键字:id

use*_*ser 56 ruby rspec ruby-on-rails rspec-rails ruby-on-rails-5

我有简单的动作节目

def show
  @field = Field.find_by(params[:id])
end
Run Code Online (Sandbox Code Playgroud)

我想要写它的规格

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
Run Code Online (Sandbox Code Playgroud)

但我有一个错误

Failure/Error: get :show, id: field

 ArgumentError:
   unknown keyword: id
Run Code Online (Sandbox Code Playgroud)

怎么解决?

Зел*_*ный 152

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
Run Code Online (Sandbox Code Playgroud)

  • 我从Rails 4.2升级到Rails 5.1之后出现了这个错误,并修复了它 - 谢谢! (12认同)
  • Life Saver :)但是这个新的API定义在哪里?我发现[提及](https://relishapp.com/rspec/rspec-rails/v/3-7/docs/request-specs/request-spec#specify-managing-a-widget-with-rails-integration -methods)但是很高兴看到这种变化发生在何处/何时/为何(如果你知道!) (7认同)
  • 想要投票21321次,谢谢! (2认同)