68 votes

Contrôleur spec mot-clé inconnu : id

J'ai un spectacle d'action simple

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

et je veux écrire une spécification pour cela

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

mais j'ai obtenu une erreur

Failure/Error: get :show, id: field

 ArgumentError:
   unknown keyword: id

Comment le réparer ?

1 votes

C'est la syntaxe Rails 4. Dans Rails 5 et plus, vous devez spécifier le mot clé "params".

179voto

Зелёный Points 4299

Les méthodes de requête HTTP n'acceptent que les arguments de mots-clés suivants params, headers, env, xhr, format

Selon la nouvelle API, vous devez utiliser des arguments sous forme de mots-clés, params dans ce cas :

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

14 votes

Cette erreur a commencé à apparaître après la mise à jour de Rails 4.2 vers Rails 5.1 et cela l'a corrigé - merci !

7 votes

Sauveur de vie :) Mais où est définie cette nouvelle API ? J'ai trouvé cette mention mais il serait bon de voir où/quand/pourquoi ce changement s'est produit (si vous le savez !)

0 votes

Mais dans rails 6 je n'obtiens aucune correspondance de route

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X