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

bra*_*h14 5 ruby testing factory-bot

我有一个用户工厂.我希望默认情况下确认用户.但鉴于一个特点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
Run Code Online (Sandbox Code Playgroud)

我正在考虑这些问题.但这不起作用并产生一个 未定义的方法"未经证实"

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
Run Code Online (Sandbox Code Playgroud)

dgi*_*rez 9

你几乎在那里:

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
Run Code Online (Sandbox Code Playgroud)