如何从factory_girl创建返回现有实例?

时间:2016-06-13 20:43:34

标签: ruby rspec factory-bot

我有两家工厂:

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

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

有没有办法可以定义工厂以便它不会创建,它只是调用另一个工厂并使用回调?

1 个答案:

答案 0 :(得分:3)

这似乎有效,尽管我还没有广泛测试过:

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

请注意,当您save!时,factory_girl会在实例上调用create(:bar),但在这种情况下,它不会执行任何操作,因为在创建Bar时已保存Foo。< / p>