2017-08-22 46 views
1

比方說,我有以下ActiveRecord型號:FactoryGirl - 重寫與特質的關聯?

class Car 
    belongs_to :driver 
end 

class Driver 
    # Has attribute :name 
    has_one :car 
end 

我定義了幾個使用這些模型工廠:

FactoryGirl.define do 
    factory :car do 
    association :driver 

    trait :fast_car do 
     association :driver, :fast 
    end 
    end 
end 

FactoryGirl.define do 
    factory :driver do 
    name 'Jason' 

    trait :fast do 
     name 'Mario' 
    end 
    end 
end 

當我執行下面的代碼:

car = FactoryGirl.create(:car, :fast_car) 

我期望car.driver.name等於Mario,但它相當於Jason。這使我相信你不能使用特徵來覆蓋工廠的關聯。這是真的?如果是這樣,那麼爲快速車改寫相關Driver的正確方法是什麼?

回答

2

幸運的是,你可以。您需要指定了使用數組,其中第一個元素是,你要使用的關聯,其餘元素的工廠的名稱具有關聯關係的factory關鍵字是工廠的特質:

FactoryGirl.define do 
    factory :car do 
    association :driver 

    trait :fast_car do 
     association :driver, factory: [:driver, :fast] 
    end 
    end 
end 

FactoryGirl.define do 
    factory :driver do 
    name 'Jason' 

    trait :fast do 
     name 'Mario' 
    end 
    end 
end