我遇到一个问题,在实际构建之后,after_build似乎没有触发。如下面的示例所示,after_build在通过Factory.build:tail调用时不应构建第二个尾部,因为已经有尾部。
任何知道如何解决这个问题的人?或者如何修补Factory Girl的行为符合预期。
无视猫通常没有多尾等的事实:)
楷模class Cat
include Mongoid::Document
embeds_many :tails
end
class Tail
include Mongoid::Document
embedded_in :cat
end
工厂
Factory.define :cat do |a|
a.after_build do |cat|
Factory.build :tail, :cat => cat if cat.tails.empty?
end
end
Factory.define :tail do |a|
a.association :cat, :factory => :cat
end
问题
>> tail = Factory.build :tail
=> #<Tail _id: 4d839b5930efd431c7000008, >
>> tail.cat.tails.length
=> 2 # this should be 1
>> cat = Factory.build :cat
=> #<Cat _id: 4d839b6c30efd431c700000b, >
>> cat.tails.length
=> 1
答案 0 :(得分:2)
我不会定义一个尾部的默认工厂,它会创建一个猫并嵌入尾部。
Factory.define :cat do |a|
a.after_build do |cat|
cat.tails << Factory.build(:tail) if cat.tails.empty?
end
end
Factory.define :tail do |a|
end
Factory.define :cat_tail, :parent => :tail do |a|
a.association :cat, :factory => :cat
end
答案 1 :(得分:0)
这是我最终使用的。我跟着Marcels建议使用一个单独的工厂,虽然after_build仍然导致了同样的问题(两个尾巴而不是预期的一个),所以它也必须去。如果cat.tails.empty?因某些原因无法按预期工作。
Factory.define :cat_tail, :parent => :tail do |a|
a.association :cat, :factory => :cat
end
Factory.define :tail do |a|
end
Factory.define :cat do |a|
end