对.在文档中忽略了它.
您可以在Fabricators中将它们定义为一个块,该块可选地接收正在制作的对象以及定义的任何瞬态属性的散列.与在Fabricator中工作的任何东西一样,您也可以在调用Fabricate时定义它们,它们将像您期望的那样工作.回调也可堆叠的,这意味着你可以在一个制造者声明相同类型的多个,当你继承另一个制造者,他们将不会被打一顿.
Fabricator(:place) do before_validation { |place, transients| place.geolocate! } after_create { |place, transients| Fabricate(:restaurant, place: place) } end
另外,在我的情况下,我需要使用after_save回调.我能够在制造商内部设置current_bar
我的foo
对象,但是一旦在规范中,它current_bar
仍然是nil
.update
after_create里面没有这个方法(我是ruby的新手,所以我不知道为什么),但它在after_save中可用.调用更新让我走了.
Fabricator(:foo) do transient :current_bar_data after_save { |foo, transients| bar = Fabricate( :bar, foo: foo, bar_data: transients[ :current_bar_data ] ) foo.update( current_bar: bar ) } current_bar nil end
现在我可以为我的规格制作一个foo
完整的current_bar
:
let!( :some_foo ) { Fabricate( :foo, current_bar_data: "some bar data" ) }