Как передать аргумент для метода FactoryGirl

Существует следующий код для создания объектов:

FactoryGirl.define do

  factory :user do
    name    'Some name'
    phone   '89277777777'
    address 'Some address'
  end

  factory :order do
    title   'Some title'
  end
end

Пользовательская модель получила has_many :orders ассоциация, и можно ли пройти user фабрика для order завод?

Заранее спасибо.

2 ответа

Решение

Да, так:

FactoryGirl.define do

  factory :user do
    name    'Some name'
    phone   '89277777777'
    address 'Some address'
  end

  factory :order do
    user
    title   'Some title'
  end
end

В ваших спецификациях:

FactoryGirl.create(:order)

создаст как объект заказа, так и связанный объект пользователя.

больше информации о FactoryGirl с Rails - https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md

Да, решение так же просто, как использование метода ассоциации

factory :order do
  title   'Some title'
  association :user
end

это может быть сокращено до

factory :order do
  title   'Some title'
  user
end

Слово предупреждения. Этот подход обычно делает ваше приложение очень медленным, пока увеличивается сложность ваших моделей.

На самом деле, если у вас есть покупка, связанная с заказом, связанным с пользователем, и т. Д., То создание Покупки создаст на каскаде все связанные записи, даже если они вам не нужны. Ваши тесты со временем станут медленнее.

Я предлагаю вам использовать эти черты, чтобы составлять свои ассоциации только при необходимости.

factory :order do
  title   'Some title'

  trait :with_user do
    user
  end
end

FactoryGirl.create(:order, :with_user)

Я обычно тоже использую :with_fake_user когда мне нужно, чтобы идентификатор пользователя присутствовал для проверки, но я тестирую то, что не требует доступа к пользователю.

factory :order do
  title   'Some title'

  trait :with_user do
    user
  end
  trait :with_fake_user do
    user_id 0
  end
end

FactoryGirl.create(:order, :with_user)
FactoryGirl.create(:order, :with_fake_user)
Другие вопросы по тегам