FactoryBot не вызывает обратный вызов в черте - PullRequest
2 голосов
/ 23 января 2020

У меня есть фабрика, у которой есть черта. Я добавил обратный вызов для после создания, но обратный вызов не запускается. Я знаю это, потому что не могу зайти. Я использую FactoryBot 5 и Rails 4.2.11

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

мой тест

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

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

Также пробовал используя переходный процесс вместо черты, и он не работает огонь

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) }

1 Ответ

3 голосов
/ 23 января 2020

Обратный вызов after(:create) не вызывается, поскольку вы не создаете a document с FactoryBot.create.

Следующий код должен работать.

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

Для получения дополнительной информации прочитайте Документы обратного вызова FactoryBot .

...