FactoryGirl父类工厂随机选择其中一个STI子类

时间:2014-03-17 01:36:59

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

我有一个Animal父类。 BirdMonkey是通过STI扩展Animal的子类。

class Animal < ActiveRecord::Base
end

class Bird < Animal
end

class Monkey < Animal
end

有没有办法定义我的FactoryGirl工厂,以便FactoryGirl.create(:animal)为我随机调用FactoryGirl.create(:bird)FactoryGirl.create(:monkey)

2 个答案:

答案 0 :(得分:2)

https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#custom-construction。你可以这样做:

FactoryGirl.define do
  factory :animal do
    initialize_with do
      if [true, false].sample
        Monkey.new
      else
        Bird.new
      end
    end
  end
end

答案 1 :(得分:0)

只是一个偏爱,但我想我会与以后的Googlers分享这种选择:

FactoryGirl.define do
  factory(:animal) do
    type { %w[Monkey Bird].sample }

    initialize_with do
      record = new(attributes)
      record.becomes(record.type.constantize)
    end
  end
end