FactoryGirl - 覆盖与特征的关联?
FactoryGirl - override association with trait?
假设我有以下 ActiveRecord
个型号:
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
的正确方法是什么?
幸运的是,你可以。您需要为与数组的关联指定 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
假设我有以下 ActiveRecord
个型号:
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
的正确方法是什么?
幸运的是,你可以。您需要为与数组的关联指定 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