如何根据特征实现 FactoryGirl 的条件行为

How do I achieve conditional behavior of FactoryGirl based on traits

我有一个用户工厂。我希望默认情况下确认用户。但是鉴于特征unconfirmed,我不希望它们被确认。

虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。

factory :user do
  after(:create) do |user, evaluator|
    # unwanted implementation details here
    unless FactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)
      user.confirm!
    end
  end
  trait :unconfirmed do
  end
end

我正在考虑这些问题。但这不起作用并产生 未定义的方法`未确认'

factory :user do
  ignore do
    unconfirmed = false
  end

  after(:create) do |user, evaluator|
    user.confirm! unless evaluator.unconfirmed
  end

  trait :unconfirmed do
    unconfirmed = true
  end
end

你快到了:

factory :user do
  transient do
    unconfirmed false
  end

  trait :unconfirmed do
    unconfirmed true
  end

  after(:create) do |user, evaluator|
    user.confirm! unless evaluator.unconfirmed
  end
end