用链式协会定义工厂

时间:2016-04-21 17:44:44

标签: ruby factory-bot

我想创建一个:membership工厂,然后创建一个:comment工厂,在这个特定的情况下"卷起来"与会员所在的同一集团。它不应该总是指向同一个组,所以我定义我的工厂是这样的:

factory :membership do
  user
  group
end

factory :decision do
  group
end

factory :comment do
  decision
end

然后我就像这样创建这两个对象:

membership = create(:membership)
decision = create(:decision, group: membership.group)
comment = create(:comment, decision: decision)

这很有效,但它只是一个很小的例子。我希望能够创建成员资格,然后将成员资格作为参数传递给Comment构造函数,从而不需要第二行。我已经查看了factory_girl文档,但我无法弄清楚如何更改我的工厂定义来执行此操作。有办法吗?

1 个答案:

答案 0 :(得分:1)

将会员资格传递到transient attribute的评论工厂。在before(:create)回调中,从成员资格创建决策并将决策添加到评论:

factory :comment do
  transient do
    membership
  end

  before(:create) do |comment, evaluator|
    decision = create(:decision, group: evaluator.membership.group)
    comment.decision = decision
  end

end