вопрос о синтаксисе Factory Girl для передачи опции в черту - PullRequest
0 голосов
/ 21 апреля 2020

Я беру на себя проект, в котором есть раздел вопросов / ответов. Я добавляю функцию синдикации и хотел бы иметь отношения, где вопрос has_one: syndicatable_question.

Для моей фабрики у меня есть API, например sq = FactoryGirl.create(:question, :with_syndication ), для простого случая и хотелось бы что-то вроде sq = FactoryGirl.create(:question, :with_syndication(syndicatable_location_id: 345)), но это не работает. Как я мог передать опцию / аргумент для черты? Какие изменения мне нужно будет сделать на фабрике?

Моя фабрика сейчас выглядит так:

FactoryGirl.define do
  factory :question, class: Content::Question do
    specialty_id 2
    subject { Faker::Lorem.sentence }
    body { Faker::Lorem.paragraph }
    location_id 24005

    trait :with_syndication do
      after(:create) do |q, options|
        create(:syndicatable_question, question_id: q.id, syndicatable_location_id: q.location_id)
      end
    end
  end
end

1 Ответ

1 голос
/ 21 апреля 2020

Вам необходимо добавить transient блок к вашей черте

FactoryGirl.define do
  factory :question, class: Content::Question do
    specialty_id 2
    subject { Faker::Lorem.sentence }
    body { Faker::Lorem.paragraph }
    location_id 24005

    transient do
      syndicatable_location_id 24005
    end

    trait :with_syndication do
      after(:create) do |q, options|
        create(:syndicatable_question, question_id: q.id, syndicatable_location_id: options.syndicatable_location_id)
      end
    end
  end
end


FactoryGirl.create(:question, :with_syndication, syndicatable_location_id: 345)

Переходные атрибуты https://www.rubydoc.info/gems/factory_girl/file/GETTING_STARTED.md#Traits

...