factory_girl 瞬态属性是什么?我为什么要用一个?
What are factory_girl transient attributes? Why would I use one?
我从 Thoughtbot 读了 this,但它仍然让我感到困惑。
这是他们的例子:
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"
所以,
.upcased
是模型的真实属性吗?
transient
块到底在做什么?设置可以在工厂中使用的变量?
- 什么是
evaluator
?它总是需要最后通过吗?如果您的 create
函数使用特征、瞬变并具有多个值怎么办?
factory_bot 的瞬态 'attributes' 根本不是属性;它们只是工厂方法调用的参数,工厂内的代码可以使用它们。因此,在您的示例中,不,upcased
不是模型属性。
transient
块列出 'attribute' 名称(即传递给工厂方法的散列中的键)不是 属性。 factory_bot 在新创建的模型实例上设置属性时会忽略它们,除非您在工厂定义中编写代码告诉 factory_bot 对它们执行某些操作。
evaluator
是传递给 factory_bot 回调的对象。它始终是第二个块参数;模型对象始终是第一个参数。它在概念上类似于 Ruby 的 binding
。您可以向它询问参数哈希中任何键的值,无论它是实际属性还是瞬态属性 'attribute'.
就工厂方法的参数而言,特征和瞬态属性不会相互影响,因为特征是标量,而瞬态属性是参数散列的一部分。参数散列中可以包含任意数量的真实属性和瞬态 'attributes'。
这里是 factory_bot 记录文档:https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md
我从 Thoughtbot 读了 this,但它仍然让我感到困惑。
这是他们的例子:
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"
所以,
.upcased
是模型的真实属性吗?transient
块到底在做什么?设置可以在工厂中使用的变量?- 什么是
evaluator
?它总是需要最后通过吗?如果您的create
函数使用特征、瞬变并具有多个值怎么办?
factory_bot 的瞬态 'attributes' 根本不是属性;它们只是工厂方法调用的参数,工厂内的代码可以使用它们。因此,在您的示例中,不,upcased
不是模型属性。
transient
块列出 'attribute' 名称(即传递给工厂方法的散列中的键)不是 属性。 factory_bot 在新创建的模型实例上设置属性时会忽略它们,除非您在工厂定义中编写代码告诉 factory_bot 对它们执行某些操作。
evaluator
是传递给 factory_bot 回调的对象。它始终是第二个块参数;模型对象始终是第一个参数。它在概念上类似于 Ruby 的 binding
。您可以向它询问参数哈希中任何键的值,无论它是实际属性还是瞬态属性 'attribute'.
就工厂方法的参数而言,特征和瞬态属性不会相互影响,因为特征是标量,而瞬态属性是参数散列的一部分。参数散列中可以包含任意数量的真实属性和瞬态 'attributes'。
这里是 factory_bot 记录文档:https://github.com/thoughtbot/factory_bot/blob/master/GETTING_STARTED.md