FactoryGirl - 覆盖与特质的关联?

时间:2017-08-22 17:25:32

标签: ruby-on-rails factory-bot activemodel

我们说我有以下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的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

幸运的是,你可以。您需要为与数组关联指定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