[RUBY] [RSpec] ArgumentError: falsche Anzahl von Argumenten Wenn Sie einen Fehler erhalten, müssen Sie sich möglicherweise um die Benennung von Variablen kümmern.

Einführung

controller specsDies ist ein Artikel über. Als ich die Variablen für die Gemeinsamkeit definierte, beschloss ich, sie als Memorandum beizubehalten, da sie überflutet wurden, wenn ich sie richtig benannte!

Umgebung

ruby 2.6.5 rails 5.2.4.2 rspec 3.7 capybara 2.15 factory_bot_rails 4.11

Fehlerinhalt

Code vor Fehlerkorrektur

spec/controllers/posts_controller_spec.rb


require 'rails_helper'

RSpec.describe PostsController, type: :controller do
  
  context "Aktionen, für die keine Anmeldung erforderlich ist" do
  .
  .
  .
  end

  context "Aktionen, für die eine Anmeldung erforderlich ist" do

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

    describe "Aktion erstellen" do

      context "Für angemeldete Benutzer" do
        it "Erstellen Sie einen Beitrag" do
          login user
          expect {
            post :create, params: { post: post_params }
          }.to change(user.posts, :count).by(1)
        end
      end

      context "Für Benutzer, die nicht angemeldet sind" do
      .
      .
      .
      end

    end
  end
end

Annahme ➡︎ Ich verwende FactoryBot, um Testdaten zu erstellen. (Post ist zugeordnet) ➡︎ Die Anmeldemethode (Benutzer) ist in der Datei rails_helper.rb für die Anmeldung definiert.

Fehlerinhalt

Failures:
  1)PostsController Aktionen, für die eine Anmeldung erforderlich ist Aktion erstellen Für angemeldete Benutzer Erstellen Sie einen Beitrag
    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>'

Die Anzahl der Argumente auf dem Aufrufer (give) beträgt 2, und die Anzahl der Argumente auf der Methodenseite (erwartet) beträgt 0.

Mit anderen Worten, ich ärgere mich über die Tatsache, dass "zwei Argumente aufgerufen werden, aber es gibt kein entsprechendes Argument auf der Methodenseite".

Fehlerpunkt

post :create, params: { post: post_params }

Der Grund, warum diese Beschreibung einen Fehler verursacht, ist, dass der obige Teil " post: `` ", den ich als" `` Parameterschlüssel übergeben sollte, tatsächlich der Schlüssel ist. Es wurde durch verursacht, das als `` Postvariable angesehen wurde, die definiert wurde, um Posts gemeinsam zu machen, nicht als.

Die beiden Gaves bedeuteten " post:` "und" post_params``` "...

Daher werde ich die Benennung der Post-Variablen `des Commoners so ändern, dass der Teil" post: "als Schlüssel erkannt werden kann. `` `

Lösung

Nach der Codeänderung

spec/controllers/posts_controller_spec.rb


require 'rails_helper'

RSpec.describe PostsController, type: :controller do

  context "Aktionen, für die eine Anmeldung erforderlich ist" do

    let(:user) { FactoryBot.create(:user) }
    let(:login_user) { login(user) }
    - let(:post) { FactoryBot.create(:post) } #Löschen
    + let(:new_post) { FactoryBot.create(:post) } #Variablennamen ändern
    let(:post_params) { FactoryBot.attributes_for(:post) }

    describe "Aktion erstellen" do
      context "Für angemeldete Benutzer" do
        it "Erstellen Sie einen Beitrag" do
          login user
          expect {
            post :create, params: { post: post_params }
          }.to change(user.posts, :count).by(1)
        end
      end
    end
  end
end

Schreiben Sie die Post-Variable in die Variable new_post um.

Spezifikationsausführung

$ bin/rspec spec/controllers

1 examples, 0 failures

Ich bestand!

Dieser Fehler gab mir das Gefühl, dass ich vorsichtig sein sollte, wenn ich Variablen benenne ... lol

Referenz

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

Recommended Posts

[RSpec] ArgumentError: falsche Anzahl von Argumenten Wenn Sie einen Fehler erhalten, müssen Sie sich möglicherweise um die Benennung von Variablen kümmern.
Was tun, wenn ein Argumentfehler auftritt? Falsche Anzahl von Argumenten (gegeben 2, erwartete 0) in Ihrem RSpec-Test
Was tun, wenn in bind.pry eine falsche Anzahl von Argumenten angezeigt wird?
ArgumentError (falsche Anzahl von Argumenten (gegeben 0, erwartete 1)) Fehlermeldung
Was tun, wenn Sie den Text eines Elements in Selen nicht abrufen können?
Wenn Sie es leid sind, ER-Diagramme zu zeichnen
[Schienen] Was tun, wenn mit der Fehlermethode keine Fehlermeldung angezeigt wird?
Was tun, wenn während des Rails-Testcodes ein Fehler bei der Standardauthentifizierung auftritt?
Was tun, wenn Sie eine [HTTP-Anforderung hat zu lange gedauert] Fehler in Docker.
Was tun, wenn in Docker ein gcc-Fehler auftritt?
[Rails] So lösen Sie eine falsche Anzahl von Argumenten (gegeben 2, erwartet 0..1) für user_id auf