I read this https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md#transient-attributes来自 Thoughtbot 但它仍然让我感到困惑。
这是他们的例子:
factory :user do
transient do
rockstar true
upcased false
end
name { "John Doe#{" - Rockstar" if rockstar}" }
email { "#{name.downcase}@example.com" }
after(:create) do |user, evaluator|
user.name.upcase! if evaluator.upcased
end
end
create(:user, upcased: true).name
#=> "JOHN DOE - ROCKSTAR"
So,
- Is
.upcased
模型上的真实属性?
- 是什么
transient
块真的在做什么?设置可以在工厂中使用的变量?
- What is
evaluator
?它总是需要最后通过吗?如果你的create
函数使用特征、瞬态并且具有多个值?
factory_bot 的瞬态“属性”根本不是属性;它们只是工厂方法调用的参数,可供工厂内的代码使用。所以,在你的例子中,不,upcased
不是模型属性。
The transient
块列出了“属性”名称(即传递给工厂方法的哈希中的键)not属性。在新创建的模型实例上设置属性时,factory_bot 会忽略它们,除非您在工厂定义中编写代码来告诉factory_bot 对它们执行某些操作。
evaluator
是传递给factory_bot回调的对象。它始终是第二个块参数;模型对象始终是第一个参数。它在概念上类似于 Ruby 的binding
。您可以向它询问参数哈希中任何键的值,无论它是实际属性还是瞬态“属性”。
就工厂方法的参数而言,特征和瞬态属性不会相互影响,因为特征是标量,而瞬态属性是参数哈希的一部分。参数散列中可以包含任意数量的真实属性和瞬态“属性”。
这是用于记录的factory_bot文档:https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)