如何 return 创建 factory_girl 中的现有实例?

How do I return an existing instance from factory_girl create?

我有两个工厂:

factory :foo
factory :bar

A Foo has_one Bar.

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) 即可获得我需要的 Bar。我认为 to_create 看起来是个不错的选择,但它给了我:

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

有没有一种方法可以定义工厂,使其不创建,而只是调用另一个工厂并使用回调?

这似乎有效,虽然我还没有广泛测试它:

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

请注意,当您 create(:bar) 时,factory_girl 在实例上调用 save!,但在这种情况下它什么都不做,因为 Bar 在创建 Foo.