Как мне вернуть существующий экземпляр из factory_girl create?

У меня две фабрики:

factory :foo
factory :bar

Панель Foo has_one.

foo.rb имеет обратный вызов after_create для создания объекта Bar. В настоящее время я могу получить то, что мне нужно, вот так, но это минимальный пример:

let(:bar) { create(:foo).bar }

Я хотел бы получить объект Bar более напрямую, например (что не работает) ...

factory :bar_from_foo_callback do
  to_create { create(:foo).bar }
end

... а затем просто позвоните create(:bar_from_foo_callback), чтобы получить нужный мне бар. Я думал, что to_create выглядело неплохо, но это дает мне:

undefined method `bar' for
 #<FactoryGirl::Declaration::Static:0x007fb85e3d79d0>

Есть ли способ определить фабрику, чтобы она не создавалась, а просто вызывала другую фабрику и использовала обратный вызов?


person eeeeeean    schedule 13.06.2016    source источник


Ответы (1)


Кажется, это работает, хотя я не тестировал это тщательно:

factory :bar do
  initialize_with { create(:foo).bar }
end

Обратите внимание, что factory_girl вызывает save! в экземпляре, когда вы create(:bar), но в этом случае он ничего не делает, потому что Bar уже был сохранен при создании Foo.

person Dave Schweisguth    schedule 13.06.2016