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

时间:2015-02-18 13:27:09

标签: 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

我正在思考这些问题。但这不起作用并产生一个 未定义的方法`未经证实的'

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

1 个答案:

答案 0 :(得分:8)

你快到了那里:

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