FactoryGirl工厂特征内的序列不使用主序列计数器
Sequence within trait of FactoryGirl factory does not use main sequence counter
我有以下工厂:
FactoryGirl.define do
factory :foo do
sequence(:name) { |n| "Foo #{n}" }
trait :y do
sequence(:name) { |n| "Fooy #{n}" }
end
end
end
如果我运行
create :foo
create :foo
create :foo, :y
我得到 Foo 1, Foo 2, Fooy 1
。但是我想要Foo1, Foo2, Fooy 3
。我怎样才能做到这一点?
您定义了两个不同的序列生成器,因为它们不在同一范围内。
我不会将 :name 用于生成器。一个暗示数字的名字似乎更合适。
sequence :seq_number
在工厂中包含一个临时属性并分配生成的序列号。
transient do
seq_no { generate(:seq_number) }
end
对 'name' 属性使用瞬态属性。这同样适用于 'name'.
的特征版本
name { "Foo #{seq_no}" }
trait :y do
name { "Fooy #{seq_no}" }
end
干杯,
欧根
经过 and this answer 的一些提示后,我得出以下解决方案:
FactoryGirl.define do
sequence :base_name do |n|
" #{n}"
end
factory :foo do
name { "Foo " + generate(:base_name) }
trait :y do
name { "Fooy " + generate(:base_name) }
end
end
end
我有以下工厂:
FactoryGirl.define do
factory :foo do
sequence(:name) { |n| "Foo #{n}" }
trait :y do
sequence(:name) { |n| "Fooy #{n}" }
end
end
end
如果我运行
create :foo
create :foo
create :foo, :y
我得到 Foo 1, Foo 2, Fooy 1
。但是我想要Foo1, Foo2, Fooy 3
。我怎样才能做到这一点?
您定义了两个不同的序列生成器,因为它们不在同一范围内。
我不会将 :name 用于生成器。一个暗示数字的名字似乎更合适。
sequence :seq_number
在工厂中包含一个临时属性并分配生成的序列号。
transient do
seq_no { generate(:seq_number) }
end
对 'name' 属性使用瞬态属性。这同样适用于 'name'.
的特征版本name { "Foo #{seq_no}" }
trait :y do
name { "Fooy #{seq_no}" }
end
干杯, 欧根
经过
FactoryGirl.define do
sequence :base_name do |n|
" #{n}"
end
factory :foo do
name { "Foo " + generate(:base_name) }
trait :y do
name { "Fooy " + generate(:base_name) }
end
end
end