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

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

最佳答案

你快到了:

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

关于ruby - 如何根据特征实现 FactoryGirl 的条件行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28584777/

相关文章:

c# - 局部变量和从方法调用的变量之间的区别? C#

testing - 如何在Windows 7 的IE10 中测试网站?

ruby-on-rails - FactoryGirl 创建多条记录

ruby-on-rails - FactoryGirl 可以在创建新模型之前检查数据库中已经存在的模型吗?

MySQL 随机查询生成器输出含义

ruby-on-rails - 如何在 en.yml 上格式化带有 “th” 后缀的日期?

sql - Rails 控制台和 Rails 服务器日志中输出的颜色是什么意思?

ruby-on-rails - 如何使用 RSpec 登录用户

ruby-on-rails - 我怎样才能用工厂女孩创建唯一的字符串(没有数字)?

ruby - 在 Ruby 中交换字符串中的字母