Ruby Factory Girl Создание нескольких объектов - PullRequest
1 голос
/ 31 января 2012

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

FactoryGirl.define do                      
   factory :li_store , :class => Store do   
   ...store stuff...blah...blah         
end                                      

factory :li_line_item_stores_two,:class=>LineItemsStore do   
   association :store, :factory=>:li_store                    
   association :line_item , :factory=>:li_line_item_two                                                         
end                                                             
factory :li_line_item_stores_three,:class=>LineItemsStore do 
   association :store :factory => :li_store                                   
   association :line_item , :factory => :li_line_item_three                                                 
end

Теперь, если я получу доступ к: li_line_item_stores_two и: li_line_item_stores_two, каждый из них имеет свой объект для своего свойства хранилища.Для моего теста мне нужно, чтобы оба объекта имели один и тот же объект хранилища.

Кто-нибудь знает, какой аспект FactoryGirl мне не хватает, или как мне сделать так, чтобы оба объекта ссылались на один и тот же объект магазина?

Любая помощь очень ценится.

1 Ответ

3 голосов
/ 01 февраля 2012

Вы хотите определить baseline объекты и атрибуты в вашем файле factories.rb. Вы не хотите определять кучу разных идентичных версий объекта. Вместо этого factories.rb должен выглядеть примерно так:

FactoryGirl.define do
  factory :li_store do 
    whatever
  end

  factory :li_line_item do
    whatever
  end

  factory :li_line_item_store do
    association :store, :factory => :li_store
    association :line_item, :factory => :li_line_item
  end
end

Эти атрибуты затем могут быть переопределены (или могут быть оставлены с базовыми значениями) в ваших тестах:

def test_something
  store = Factory(:li_store)
  li_line_item_store_one = Factory(:li_line_item_store, :store => store)
  li_line_item_store_two = Factory(:li_line_item_store, :store => store)
end

С учетом вышесказанного у вас теперь есть два экземпляра li_line_item_store с разными позициями и одним и тем же магазином.

...