Factory Girl + Mongoid嵌入式文件夹具

时间:2011-09-24 00:16:03

标签: ruby-on-rails embed mongoid factory-bot fixtures

假设你有以下mongoid文件:

class User
    include Mongoid::Document
    embeds_one :name
end

class UserName
    include Mongoid::Document
    field :first
    field :last_initial

    embedded_in :user
end

如何创建一个初始化嵌入式名字和最后一个名字的工厂女工厂?另外,你会如何处理embeds_many关系?

2 个答案:

答案 0 :(得分:63)

我也在寻找这个,当我正在研究时,我偶然发现了很多代码并将它们拼凑在一起(我希望有更好的文档)但是这是我的部分代码。地址是1..1关系,电话是与事件的1..n关系。

  factory :event do
    title     'Example Event'

    address  { FactoryGirl.build(:address) }
    phones    { [FactoryGirl.build(:phone1), FactoryGirl.build(:phone2)] }
  end

  factory :address do
    place     'foobar tower'
    street    'foobar st.'
    city      'foobar city'
  end

  factory :phone1, :class => :phone do
    code      '432'
    number    '1234567890'
  end

  factory :phone2, :class => :phone do
    code      '432'
    number    '0987654321'
  end

(对不起,如果我无法提供我的链接,他们有点搞砸了)

答案 1 :(得分:6)

这是一个允许您动态定义嵌入对象数量的解决方案:

FactoryGirl.define do
  factory :profile do
    name 'John Doe'
    email 'john@bigcorp.com'
    user

    factory :profile_with_notes do
      ignore do
        notes_count 2
      end

      after(:build) do |profile, evaluator|
        evaluator.notes_count.times do
          profile.notes.build(FactoryGirl.attributes_for(:note))
        end
      end
    end
  end
end

这样,您就可以拨打FactoryGirl.create(:profile_with_notes)并获取两个嵌入式笔记,或者拨打FactoryGirl.create(:profile_with_notes, notes_count: 5)并获取五个嵌入式笔记。