Как да дефинираме Fabricator за клас пространство от имена

Искам да дефинирам Fabricator за класа, който има пространство от имена като 'Foo::Bar'.
Кажете ми как може да работи.

Ето моите кодове.

модели/foo.rb

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

  field :xxx ....
end

модели/foo/bar.rb

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

data/fabricators/foo_bar_fabricator.rb

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

Когато се опитах да създам обект Fabricatior на конзолата parino, но възникна грешка.

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

Когато се опитах да създам друг обект на Fabricator, който не беше клас на пространство от имена като „Потребител“, всичко се оправи.


person utwang    schedule 30.01.2013    source източник


Отговори (2)


Според документацията на Fabrication за създаване на обекти:

За да използвате различно име от класа, трябва да посочите from: :symbolized_class_name като втори аргумент.

Така че следното трябва да работи:

Fabricator(:foo_bar, from: 'Foo::Bar') do
  yyy 'MyString'
  zzz 'MyString'
end
person Cameron Pope    schedule 04.10.2013

Това проработи при мен

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