J'ai fait un test appelé "quand les commentaires peuvent être sauvegardés" avec le code de test unitaire. À cette époque, les clés externes créées par FactoryBot, skill_id et user_id, existaient, mais pour une raison quelconque, elles étaient dites vides.
Déclaration d'erreur
  1)Publication de commentaires Lorsque la publication de commentaires est réussie Vous pouvez vous inscrire s'il y a un commentaire
     Failure/Error: expect(@comment).to be_valid
       expected #<Comment id: nil, text: "v5tycc16e03hixch09y3661diocp6t5mwqj11r26gbjnptc0ty...", skill_id: 2, user_id: 1, created_at: nil, updated_at: nil> to be valid, but got errors:Veuillez saisir l'utilisateur,Veuillez saisir la compétence
     # ./spec/models/comment_spec.rb:11:in `block (4 levels) in <top (required)>'
Finished in 0.78208 seconds (files took 6.7 seconds to load)
3 examples, 1 failure
Lors de la vérification de la validation de la clé externe, la valeur est obtenue en accédant à la base de données avec create au lieu de build. Apparemment, skill_id et user_id existaient, mais en raison de la contrainte de clé externe dans le fichier de migration, ces valeurs ont dû être extraites d'une autre table.

before
factorybot
FactoryBot.define do
  factory :comment do
    text { Faker::Lorem.characters(number: 100) }
    user_id { 1 }
    skill_id { 2 }
  end
end
comment_spec.rb
require 'rails_helper'
RSpec.describe Comment, type: :model do
  describe 'Poste un commentaire' do
  before do
    @comment = FactoryBot.build(:comment)
  end
    context 'Quand la publication de commentaires se passe bien' do
      it 'Vous pouvez vous inscrire s'il y a un commentaire' do
        expect(@comment).to be_valid
      end
    end
...
after
factorybot
FactoryBot.define do
  factory :comment do
    text { Faker::Lorem.characters(number: 100) }
    association :user
    association :skill
  end
end
comment_spec.rb
require 'rails_helper'
RSpec.describe Comment, type: :model do
  describe 'Poste un commentaire' do
  before do
    @comment = FactoryBot.create(:comment)
  end
    context 'Quand la publication de commentaires se passe bien' do
      it 'Vous pouvez vous inscrire s'il y a un commentaire' do
        expect(@comment).to be_valid
      end
    end
...
        Recommended Posts