[Ruby On Rails] Bei der Durchführung eines Modell-Unit-Tests mit RSpec mit FactoryBot tritt ein Fehler auf, da der externe Schlüssel nicht eingegeben wurde.

Erster Beitrag Es ist ein Memorandum.

Fehlerhintergrund

Bei der Ausführung des Tests mit RSpec wurde der in FactoryBot zu beschreibende externe Schlüssel nicht eingegeben.

FactoryBot.define do
  factory :order_form do
    zipcode       {'123-4567'}
    prefecture_id {1}
    city          {'Ah Ward, Ah Call City'}
    address       {'Unteraufruf 1-1-1'}
    phone_number  {'09012345678'}
  end
end

Fehlerinhalt

OrderForm
Produktkauf
Wenn der Produktkauf gut läuft
Kann gekauft werden, wenn alle Artikel vorhanden sind(FAILED - 1)

Failures:

  1)OrderForm Produktkauf Wenn der Produktkauf erfolgreich ist Sie können kaufen, wenn alle Artikel vorhanden sind
     Failure/Error: expect(@order_form).to be_valid
       expected #<OrderForm:0x00007fe44961c1e8 @zipcode="123-4567", @prefecture_id=1, @city="Ah Ward, Ah Call City", @address="Unteraufruf 1-1-1", @phone_number="09012345678", @validation_context=nil, @errors=#<ActiveModel::Errors:0x00007fe448aeeaa0 @base=#<OrderForm:0x00007fe44961c1e8 ...>, @messages={:user_id=>["can't be blank"], :item_id=>["can't be blank"]}, @details={:user_id=>[{:error=>:blank}], :item_id=>[{:error=>:blank}]}>> to be valid, but got errors: User can't be blank, Item can't be blank
     # ./spec/models/order_form_spec.rb:10:in `block (4 levels) in <top (required)>'

Finished in 0.17606 seconds (files took 1.9 seconds to load)
1 example, 1 failure

Failed examples:

rspec ./spec/models/order_form_spec.rb:9 #OrderForm Produktkauf Wenn der Produktkauf erfolgreich ist Sie können kaufen, wenn alle Artikel vorhanden sind

Hier sind einige bemerkenswerte Punkte.

@errors=#<ActiveModel::Errors:0x00007fe448aeeaa0 @base=#<OrderForm:0x00007fe44961c1e8 ...>, @messages={:user_id=>["can't be blank"], :item_id=>["can't be blank"]}, @details={:user_id=>[{:error=>:blank}], :item_id=>[{:error=>:blank}]}>> to be valid, but got errors: User can't be blank, Item can't be blank

Er sagte mir, dass die user_id und item_id, die als externe Schlüssel verwendet wurden, leer sind.

Fehler Korrektur

Aufgrund des Fehlerinhalts fand ich, dass die Beschreibung in FactoryBot korrigiert werden sollte. Alles, was Sie tun müssen, ist, user_id und item_id wie angewiesen zu FactoryBot hinzuzufügen.

    user_id { FactoryBot.create(:user).id }
    item_id { FactoryBot.create(:item).id }

Modifiziertes Terminal

OrderForm
Produktkauf
Wenn der Produktkauf gut läuft
Kann gekauft werden, wenn alle Artikel vorhanden sind

Finished in 0.3807 seconds (files took 3.22 seconds to load)
1 example, 0 failures

Es ist ein Erfolg.

Recommended Posts

[Ruby On Rails] Bei der Durchführung eines Modell-Unit-Tests mit RSpec mit FactoryBot tritt ein Fehler auf, da der externe Schlüssel nicht eingegeben wurde.
[Ruby On Rails] Testfehler mit RSpec MySQL-Client ist nicht verbunden
[Ruby on Rails] Modelltest mit RSpec
[Ruby on Rails] Beim Ausführen von RSpec wird eine Warnung angezeigt, da gem'chromedriver-helper 'veraltet ist.
[Ruby on Rails] Fügen Sie eine Spalte mit externen Schlüsselbeschränkungen hinzu
Verstehen Sie die Codeabdeckung mit Rspec, dem Ruby on Rails-Testframework
[Ruby on Rails] Test mit RSpec anzeigen
[Ruby on Rails] Controller-Test mit RSpec
Einführung in Rspec, ein Testframework für Ruby on Rails
[Ruby on Rails] Wenn der Befehl heroku ausgeführt wird, wird der Befehl bash: heroku: nicht gefunden angezeigt. [Rails Tutorial]
Die Geschichte, wenn der Container nicht mit Docker-Compose gestartet wird und ein Fehler auftritt
[Rails] Lösung, wenn bei Verwendung von Capybara mit Rspec der Fehler "undefined method` visit '" angezeigt wird
[Rails / RSpec] Schreiben Sie einen Modelltest (mit Shoulda Matchers / FactoryBot)
Wenn ein Fehler auftritt, obwohl die Validierung nicht festgelegt ist
Erstellen Sie mit der Datei Ruby on Rails seeds.rb eine große Anzahl von Datensätzen mit einem einzigen Befehl
So benennen Sie ein Modell mit externen Schlüsseleinschränkungen in Rails um
[Rails5] Rspec -Einheitentest beim Verschachteln-
[RSpec] Unit Test (mit gem: factory_bot)
[Schienen] Machen wir einen Unit-Test mit Rspec!
Was tun, wenn die Meldung "Ein Server läuft bereits" angezeigt wird. Fehler beim Versuch, den Rails-Server zu starten