2016-06-13 4 views
2

Ich habe zwei Fabriken:Wie gebe ich eine vorhandene Instanz von factory_girl create zurück?

factory :foo 
factory :bar 

A Foo has_one Bar.

foo.rb verfügt über einen after_create-Callback, um ein Bar-Objekt zu erstellen. Derzeit bin ich in der Lage zu bekommen, was ich so brauche, aber es ist ein minimales Beispiel:

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

Ich mag würde die Bar Objekt mehr direkt zu bekommen, wie dies (was nicht funktioniert) .. .

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

... und dann müssen die Bar bekommen nur create(:bar_from_foo_callback) rufe ich. Ich dachte, dass to_create wie eine gute Wette aussah, aber es gibt mir:

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

Gibt es eine Weise, die ich eine Fabrik definieren kann, so dass es nicht schaffen, ist es nur eine weitere Fabrik ruft und den Rückruf verwendet?

Antwort

3

Dies scheint zu stehen, obwohl ich es nicht ausführlich getestet haben:

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

Beachten Sie, dass factory_girl ruft save! auf der Instanz, wenn Sie create(:bar), aber in diesem Fall ist es tut nichts, weil die Bar bereits gespeichert wurde während der Erstellung der Foo.

Verwandte Themen