factory_girl中的共享属性

时间:2014-04-02 07:33:47

标签: ruby-on-rails factory-bot

我有更多有地址的模型,有些只有address,有些有shipping_addressbilling_address。地址的方案是相同的。在factory_girl中,我需要复制粘贴地址属性定义,但如果可以在这里使用某种宏,那将会很棒。

我希望有类似的东西:

factory :organization do
  name          { Faker::Name.name }
  # this could define street, city, zip, ... with prefix shipping_address
  has_address :shipping_address
emnd

怎么做?

1 个答案:

答案 0 :(得分:1)

我认为使用特征可以很好地解决您的问题:

require 'factory_girl'
require 'active_model'

class Person
  include ActiveModel::Model
  attr_accessor :name, :address
end

class Organization
  include ActiveModel::Model
  attr_accessor :name, :address
end

FactoryGirl.define do
  factory :person do
    name 'John Doe'
  end

  factory :organization do
    name 'Some corp'
  end

  trait :with_address do
    address '1234 Some road'
  end
end

p FactoryGirl.build(:person, :with_address)       #=> #<Person:0x007f8d220baca0 @name="John Doe", @address="1234 Some road">
p FactoryGirl.build(:organization, :with_address) #=> #<Organization:0x007fc9a1a30008 @name="Some corp", @address="1234 Some road">