如何取消设置 FactoryBot 特征中的 属性?
How to unset a property in a FactoryBot trait?
在我的模型中,我有一个具有默认值的 属性 foo。
我想编写与 foo 默认值相关的测试,但我的 FactoryBot 将其设置为 nil(并覆盖默认值)。
如果我从工厂机器人中删除 foo 它会破坏一些其他测试。所以我想使用类似 trait 的东西来创建 foo 不是网络的情况,但我没有找到任何方法来取消 属性.
有什么方法可以取消 FactoryBot 中的 属性 设置吗?
FactoryBot.define do
factory :my_model do
foo { 'abc' }
bar { 'abc' }
trait(:foo_not_set) do
# magic to unset foo
end
end
end
您可以使用瞬态块来使用虚拟属性:
FactoryBot.define do
factory :my_model do
bar { 'abc' }
transient do
default_values true
end
before(:create) do |my_model, evaluator|
if evaluator.default_values?
foo { 'abc' }
end
end
trait(:foo_not_set) do
transient do
default_values { false }
end
end
end
end
当工厂 class 只是一个散列时,使用瞬态值对我不起作用,即当我只想要一个完全没有该键的散列时,特征将是 nil
。对我来说最有效的方法是使用嵌套工厂并将您可能称为“默认”工厂的东西设置为嵌套工厂......一种稍微倒退的方法但工作原理相同:
FactoryBot.define do
factory :my_hash_without_foo do
bar { 'abc' }
factory :my_hash do
foo { 'abc' }
end
end
end
在我的模型中,我有一个具有默认值的 属性 foo。
我想编写与 foo 默认值相关的测试,但我的 FactoryBot 将其设置为 nil(并覆盖默认值)。
如果我从工厂机器人中删除 foo 它会破坏一些其他测试。所以我想使用类似 trait 的东西来创建 foo 不是网络的情况,但我没有找到任何方法来取消 属性.
有什么方法可以取消 FactoryBot 中的 属性 设置吗?
FactoryBot.define do
factory :my_model do
foo { 'abc' }
bar { 'abc' }
trait(:foo_not_set) do
# magic to unset foo
end
end
end
您可以使用瞬态块来使用虚拟属性:
FactoryBot.define do
factory :my_model do
bar { 'abc' }
transient do
default_values true
end
before(:create) do |my_model, evaluator|
if evaluator.default_values?
foo { 'abc' }
end
end
trait(:foo_not_set) do
transient do
default_values { false }
end
end
end
end
当工厂 class 只是一个散列时,使用瞬态值对我不起作用,即当我只想要一个完全没有该键的散列时,特征将是 nil
。对我来说最有效的方法是使用嵌套工厂并将您可能称为“默认”工厂的东西设置为嵌套工厂......一种稍微倒退的方法但工作原理相同:
FactoryBot.define do
factory :my_hash_without_foo do
bar { 'abc' }
factory :my_hash do
foo { 'abc' }
end
end
end