ruby-on-rails - FactoryBot 工厂中 `transient do` block 的用途是什么?

标签 ruby-on-rails ruby rspec factory-bot

FactoryBot 工厂中 transient do 的目的是什么?

我见过很多工厂都是以下面这样的开头。

factory :car do
  owner nil
  other_attribute nil
end
...

我在这个博客上找到了一些信息:
Using FactoryGirl to easily create complex data sets in Rails

但我仍然不完全理解如何以及为什么要这样做。我对 FactoryBot 的经验很少。

有使用 FactoryBot 经验的人可以分享一些见解吗?

最佳答案

transient 属性允许您传入模型中不是属性的数据。

假设您有一个名为 car 的模型,它具有以下属性:

  • 姓名
  • 购买价格
  • 模特

在工厂中创建汽车模型时,您想将汽车名称大写。我们能做的是:

factory :car do
  transient do
    # capitalize is not an attribute of the car
    capitalize  false
  end

  name           { "Jacky" }
  purchase_price { 1000 }
  model          { "Honda" }
 
  after(:create) do |car, evaluator|
    car.name.upcase! if evaluator.capitalize
  end
end

因此,每当您创建汽车工厂并希望将名称大写时。你可以做

car = FactoryGirl.create(:car, capitalize: true)
car.name
# => "JACKY"

关于ruby-on-rails - FactoryBot 工厂中 `transient do` block 的用途是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38573131/

相关文章:

ruby-on-rails - RSpec 在 controller_spec 中将对象作为参数传递

ruby-on-rails - 工厂女协会不工作

javascript - Pusher - 将 ruby​​ 添加到 javascript 字符串?

javascript - 如何发送[:commit] param with remote: true form_for

ruby - 在 Ruby 中处理二进制数据的最佳实践?

ruby - 没有 rails 的 RSpec 不加载规范/支持中的文件

ruby-on-rails - 在模型上使用 if 和范围

ruby - 当所有规范都通过guard-rspec时,有没有办法抑制Growl通知?

ruby - 使用 ruby​​ 和 sinatra 为我的博客提供简单的搜索表单

ruby-on-rails - 自定义事务不适用于 rspec 中的 database_cleaner