[RUBY] [RSpec] ArgumentError: nombre incorrect d'arguments Si vous obtenez une erreur, vous devrez peut-être vous soucier de la dénomination des variables.

introduction

controller specsCeci est un article sur. Quand j'ai défini les variables pour les points communs, j'ai décidé de le garder comme mémorandum car il était submergé si je le nommais correctement!

environnement

ruby 2.6.5 rails 5.2.4.2 rspec 3.7 capybara 2.15 factory_bot_rails 4.11

contenu de l'erreur

Code avant correction d'erreur

spec/controllers/posts_controller_spec.rb


require 'rails_helper'

RSpec.describe PostsController, type: :controller do
  
  context "Actions qui ne nécessitent pas de connexion" do
  .
  .
  .
  end

  context "Actions nécessitant une connexion" do

    let(:user) { FactoryBot.create(:user) }
    let(:login_user) { login(user) }
    let(:post) { FactoryBot.create(:post) }
    let(:post_params) { FactoryBot.attributes_for(:post) }

    describe "créer une action" do

      context "Pour les utilisateurs connectés" do
        it "Créer un post" do
          login user
          expect {
            post :create, params: { post: post_params }
          }.to change(user.posts, :count).by(1)
        end
      end

      context "Pour les utilisateurs qui ne sont pas connectés" do
      .
      .
      .
      end

    end
  end
end

supposition ➡︎ J'utilise FactoryBot pour créer des données de test. (La publication est associée) ➡︎ La méthode de connexion (utilisateur) est définie dans le fichier rails_helper.rb pour la connexion.

contenu de l'erreur

Failures:
  1)Actions du contrôleur qui nécessitent une connexion create Action Pour les utilisateurs connectés Créer une publication
    Failure/Error: post :create, { post: post_params }
    
    ArgumentError:
      wrong number of arguments (given 2, expected 0)
   # ./spec/controllers/posts_controller_spec.rb:85:in `block (5 levels) in <main>'

Le nombre d'arguments sur l'appelant (donner) est 2, et le nombre d'arguments côté méthode (attendu) est 0.

En d'autres termes, je suis en colère que "deux arguments soient appelés, mais il n'y a pas d'argument correspondant du côté de la méthode".

Point d'erreur

post :create, params: { post: post_params }

La raison pour laquelle cette description provoque une erreur est que la partie "post: ``" ci-dessus que je devais passer en tant que `clé de paramètre `est en fait la clé. Cela a été causé par '', qui était considéré comme une `` '' variable de publication, définie pour rendre les publications communes, et non comme.

Les deux gaves signifiaient " post:` "et" post_params``` "...

Donc, je vais changer le nom de la variable post '' du roturier afin que la partie "post:" puisse être reconnue comme une clé. `` ''

Solution

Après modification du code

spec/controllers/posts_controller_spec.rb


require 'rails_helper'

RSpec.describe PostsController, type: :controller do

  context "Actions nécessitant une connexion" do

    let(:user) { FactoryBot.create(:user) }
    let(:login_user) { login(user) }
    - let(:post) { FactoryBot.create(:post) } #Effacer
    + let(:new_post) { FactoryBot.create(:post) } #Changer le nom de la variable
    let(:post_params) { FactoryBot.attributes_for(:post) }

    describe "créer une action" do
      context "Pour les utilisateurs connectés" do
        it "Créer un post" do
          login user
          expect {
            post :create, params: { post: post_params }
          }.to change(user.posts, :count).by(1)
        end
      end
    end
  end
end

Réécrivez la variable post dans la variable new_post.

exécution des spécifications

$ bin/rspec spec/controllers

1 examples, 0 failures

J'ai réussi!

Cette erreur m'a fait sentir que je devais faire attention à nommer les variables ... lol

référence

https://qiita.com/yikegaya/items/98f0c12f5c25ee4731a1

Recommended Posts

[RSpec] ArgumentError: nombre incorrect d'arguments Si vous obtenez une erreur, vous devrez peut-être vous soucier de la dénomination des variables.
Que faire si vous obtenez une erreur d'argument: nombre incorrect d'arguments (donné 2, attendu 0) dans votre test RSpec
Que faire si vous obtenez une erreur de nombre d'arguments erroné dans binding.pry
ArgumentError (nombre incorrect d'arguments (donné 0, attendu 1)) message d'erreur
Que faire si vous ne pouvez pas obtenir le texte d'un élément dans Selenium
Si vous en avez assez de dessiner des diagrammes ER
[Rails] Que faire si vous ne pouvez pas obtenir de message d'erreur avec la méthode des erreurs
Que faire si vous obtenez une erreur avec l'authentification de base pendant le code de test Rails
Que faire si vous obtenez une [Une requête HTTP a pris trop de temps à se terminer.] Erreur dans Docker.
Que faire si vous obtenez une erreur gcc dans Docker
[Rails] Comment résoudre un nombre incorrect d'arguments (donné 2, attendu 0..1) pour user_id