2012-11-21 12 views
5

Czy to możliwe, aby zachować strategię budowania kiedy mam fabrykę dla modelu, który ma związek z drugim modelu, który sam ma stowarzyszenie do trzeciego modelu?FactoryGirl strategia budować z zagnieżdżonych stowarzyszeń

W poniższym przykładzie Post jest powiązany z Użytkownikiem, a Użytkownik jest powiązany z Miastem. Nawet jeśli dla wszystkich skojarzeń użyto :strategy => :build, zapisywanie do bazy danych kończy się post.user i post.user.city. Czy w interesie szybkiego zestawu testów mogę zapobiec powstawaniu zapisów w bazie danych?

Factory.define do 
    factory :user do 
    name "A User" 
    association :city, :strategy => :build 
    end 

    factory :city do 
    name "A City" 
    end 

    factory :post do 
    title "A Post" 
    body "Some text here" 
    association :user, :strategy => :build 
    end 
end 

post = FactoryGirl.build(:post) 

post.new_record?   # True 
post.user.new_record?  # False 
post.user.city.new_record? # False 

Odpowiedz

2

Czy próbowałeś alternatywnej składni bloków?

Factory.define do 
    factory :user do 
    name "A User" 
    city { |city| city.association :city, :strategy => :build } 
    end 

    factory :city do 
    name "A City" 
    end 
end 
0

Wygląda FactoryBot (dawniej FactoryGirl) dodaje use_parent_strategy jako opcja konfiguracji w v4.8.0. Jest ona domyślnie wyłączona, aby go włączyć dodać następujące do spec/rails_helper:

FactoryGirl.use_parent_strategy = true 

stosowny wniosek wyciągnąć na factory_bot repo: https://github.com/thoughtbot/factory_bot/pull/961

Powiązane problemy