Ruby Gem Factory Bot: - PullRequest
       17

Ruby Gem Factory Bot:

0 голосов
/ 05 октября 2018

Моя цель - создать фабрику с несколькими полями с одинаковым значением, например, я хочу, чтобы имя и полное имя были равны.

FactoryBot.define do
  factory :brand do
    n = Faker::Company.name
    name      { n }
    full_name { n }
  end
end

Приведенный выше подход не работает, потому что n получить значение только один раз.

Итак, как оценить некоторый блок, чтобы поделиться его данными с несколькими динамическими полями?


Другой случай: у меня есть YML-файл с брендами,и метод get_random_brand , который возвращает хэш с полями брендов:

FactoryBot.define do
  factory :brand do
    b = get_random_brand
    name      { b['name'] }
    full_name { b['full_nam'] }
  end
end

Я понимаю, что factory do при чтении определения фабрики.

Howоценивать get_random_brand только по одному на каждую созданную фабрику?

1 Ответ

0 голосов
/ 05 октября 2018

Зависимые атрибуты на самом деле очень просты в FactoryBot, так как вы просто вызываете метод для другого атрибута в блоке:

FactoryBot.define do
  factory :brand do
    name      { Faker::Company.name }
    full_name { name }
  end
end

Вы можете, например, сделать:

FactoryBot.define do
  factory :user do
    name  { Faker::Name.name }
    email { name.downcase.tr(' ', '.') + "@example.com" }
  end
end

Приведенный выше подход не работает, потому что n получает значение только один раз.

Это потому, что блок factory ... do вычисляется при чтении определения фабрики.Не каждый раз, когда фабрика используется.

...