J'ai une usine qui a un trait. J'ai ajouté un rappel après la création, mais le rappel n'est pas déclenché. Je le sais parce que je ne peux pas faire levier. J'utilise FactoryBot 5 et Rails 4.2.11

factory :document do
  trait :signed do
    after :create do |doc|
      binding.pry
      doc.signatures << create(:signatures)
    end
  end
end

mon test

  let!(:document) { build(:document, :signed) }

  %w[...].each do |field|
    it "filters by document.#{field}" do
      ...
      co.contents << create(:content, documents: [document])
      ... 
   end
  end

J'ai également essayé d'utiliser transitoire au lieu de trait et cela ne fonctionne pas

transient do
  signed { false }
end

after :create do |doc, options|
  binding.pry
  doc.signatures << create(:signature) if options.signed
end


let!(:document) { build(:document, signed: true) }
2
Antarr Byrd 23 janv. 2020 à 00:33

1 réponse

Meilleure réponse

Le rappel after(:create) n'est pas invoqué car vous n'êtes pas en train de créer un document avec FactoryBot.create.

Le code suivant devrait fonctionner.

let!(:document) { create(:document, :signed) }

Pour plus d'informations, lisez la docs de rappel FactoryBot.

3
Arun Kumar Mohan 22 janv. 2020 à 22:14