FactoryGirl工厂特性内的序列不使用主序列计数器

时间:2015-06-16 16:28:34

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

我有以下工厂:

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。我怎样才能做到这一点?

2 个答案:

答案 0 :(得分:3)

smile2day's answerthis 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

答案 1 :(得分:0)

您定义了两个不同的序列生成器,因为它们不在同一范围内。

我不会使用:发电机的名称。隐含数字的名称似乎更合适。

sequence :seq_number

在工厂中包含瞬态属性并分配生成的序列nunber。

transient do
  seq_no { generate(:seq_number) }
end

对'name'属性使用transient属性。这同样适用于'name'的特征版本。

name { "Foo #{seq_no}" }

trait :y do
  name { "Fooy #{seq_no}" }
end

干杯, 欧根