2012-11-21 11 views
5

È possibile conservare la strategia di generazione quando ho un factory per un modello che ha un'associazione con un secondo modello, che a sua volta ha un'associazione con un terzo modello?Strategia di build di FactoryGirl con associazioni nidificate

Nell'esempio seguente, un post è associato a un utente e un utente è associato a una città. Anche se si utilizza lo :strategy => :build per tutte le associazioni, post.user e post.user.city vengono salvati nel database. Nell'interesse di una veloce suite di test, posso evitare che queste scritture di database si verifichino?

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 

risposta

2

Hai provato la sintassi alternativa del blocco?

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

Sembra FactoryBot (ex FactoryGirl) aggiunto use_parent_strategy come opzione di configurazione in v4.8.0. Si è disattivato per impostazione predefinita, per accenderlo aggiungere il seguente al vostro spec/rails_helper:

FactoryGirl.use_parent_strategy = true 

rilevante richiesta di pull sul factory_bot repo: https://github.com/thoughtbot/factory_bot/pull/961

Problemi correlati