[Ruby On Rails] Lors de l'exécution d'un test d'unité de modèle avec RSpec à l'aide de FactoryBot, une erreur se produit car la clé externe n'est pas saisie.

Premier poste C'est un mémorandum.

Contexte d'erreur

Lors de l'exécution du test avec RSpec, la clé externe à décrire dans FactoryBot n'a pas été saisie.

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

contenu de l'erreur

OrderForm
Achat de produits
Quand l'achat du produit se passe bien
Peut être acheté si tous les articles existent(FAILED - 1)

Failures:

  1)OrderForm Achat de produit Lorsque l'achat du produit est réussi Vous pouvez acheter si tous les articles existent
     Failure/Error: expect(@order_form).to be_valid
       expected #<OrderForm:0x00007fe44961c1e8 @zipcode="123-4567", @prefecture_id=1, @city="Ah Ward, Ah Call City", @address="Sous-appel 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 Achat de produit Lorsque l'achat du produit est réussi Vous pouvez acheter si tous les articles existent

Voici quelques points notables.

@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

Il m'a dit que les user_id et item_id qui ont été utilisés comme clés externes sont vides.

Correction des erreurs

D'après le contenu de l'erreur, j'ai trouvé que la description dans FactoryBot devait être corrigée. Tout ce que vous avez à faire est d'ajouter user_id et item_id à FactoryBot comme indiqué.

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

Terminal modifié

OrderForm
Achat de produits
Quand l'achat du produit se passe bien
Peut être acheté si tous les articles existent

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

C'est un succès.

Recommended Posts

[Ruby On Rails] Lors de l'exécution d'un test d'unité de modèle avec RSpec à l'aide de FactoryBot, une erreur se produit car la clé externe n'est pas saisie.
[Ruby On Rails] Erreur de test utilisant le client RSpec MySQL n'est pas connecté
[Ruby on Rails] Test de modèle avec RSpec
[Ruby on Rails] J'obtiens un avertissement lors de l'exécution de RSpec car gem'chromedriver-helper 'est obsolète.
[Ruby on Rails] Ajouter une colonne avec des contraintes de clé externe
Comprendre la couverture du code avec Rspec, le framework de test Ruby on Rails
[Ruby on Rails] Afficher le test avec RSpec
[Ruby on Rails] Test du contrôleur avec RSpec
Présentation de Rspec, un framework de test pour Ruby on Rails
[Ruby on rails] Lors de l'exécution de la commande heroku, bash: heroku: command not found s'affiche. [Tutoriel Rails]
L'histoire lorsque le conteneur ne démarre pas avec docker-compose up et qu'une erreur se produit
[Rails] Solution lorsque l'erreur "visite de la méthode non définie" "apparaît lors de l'utilisation de Capybara avec Rspec
[Rails / RSpec] Ecrire un test de modèle (avec Shoulda Matchers / FactoryBot)
Lorsqu'une erreur se produit même si la validation n'est pas définie
Créez un grand nombre d'enregistrements avec une seule commande à l'aide du fichier seeds.rb Ruby on Rails
Comment renommer un modèle avec des contraintes de clé externes dans Rails
[Rails5] Rspec -Test d'unité lors de l'imbrication-
[RSpec] Test unitaire (avec gem: factory_bot)
[rails] Faisons un test unitaire avec Rspec!
Que faire si le message "Un serveur est déjà en cours d'exécution" s'affiche. Erreur lors de la tentative de démarrage du serveur rails