如何为命名空间类定义Fabricator

时间:2013-01-30 08:44:56

标签: ruby mongoid fabrication-gem

我想定义Fabricator for class有'Foo :: Bar'这样的命名空间 告诉我它的工作方式。

这是我的代码。

模型/ foo.rb

class Foo
  include Mongoid::Document
  embedded_in :foo_container, polymorphic: true

  field :xxx ....
end

模型/富/ bar.rb

class Foo::Bar < Foo
  field :yyy ....
  field :zzz ....
end

数据/制造者/ foo_bar_fabricator.rb

Fabricator(:foo_bar, class_name: 'Foo::Bar') do
   yyy 'MyString'
   zzz 'MyString'
end

当我尝试在parino控制台上创建Fabricatior对象但发生错误时。

> Fabricate(:foo_bar)
> NoMethodError: undefined method `new?' for nil:NilClass
  .... stack messages

当我尝试创建其他Fabricator对象时,不是像'User'这样的命名空间类,它就是正确的。

2 个答案:

答案 0 :(得分:5)

根据Fabrication关于creating objects的文件:

  

要使用该类中的其他名称,必须将from: :symbolized_class_name指定为第二个参数。

所以以下内容应该有效:

Fabricator(:foo_bar, from: 'Foo::Bar') do
  yyy 'MyString'
  zzz 'MyString'
end

答案 1 :(得分:2)

这对我有用

Fabricator(:foo_bar, class_name: :'Foo::Bar') do
    xxx {Faker::Company.name}
    yyy 'Mystring'
end