我是新来的工厂女工。我希望创建一个共享工厂,它既属于成员工厂,也属于股份工厂(这样,两者都与同一个Group实例有关联)。我试图按照下面的方式编写我的共享工厂,而不是使用关联方法来避免创建共享的回调。
factory :share do
transient do
same_group
end
before(:create) do |share, evaluator|
stake = create(:shareless_stake, group: evaluator.same_group)
member = create(:shareless_membership, group: evaluator.same_group)
share.stake = stake
share.membership = member
end
end然后,我想创建这样的分享:
share = create(:share, same_group: create(:group))我收到一个错误,说'same_group‘特征没有注册。当我创建一个特性,或者用这个名称在Group下创建一个工厂时,它会抱怨对于构建的共享实例没有'group=‘setter方法。
我很困惑,因为看起来factory_girl试图将我的临时属性作为共享的实际属性来处理,而我不想这样做。我只想让same_group成为一个组实例的变量,我可以把它传递给the (:create)块。我做错了什么?
发布于 2016-05-14 20:04:13
在没有默认值的情况下定义same_group会使工厂女孩将其视为关联而不是属性(并试图查找同名工厂)。将这一行改为例如same_group nil可以解决这个问题。同样的方法可以根据参数的数量或块的存在程度被视为属性或关联,这是工厂女孩公认的一个令人困惑的方面。
https://stackoverflow.com/questions/37231140
复制相似问题