Ruby 重用FactoryGirl序列结果

Ruby 重用FactoryGirl序列结果,ruby,factory-bot,Ruby,Factory Bot,如果我有一个相当标准的用户类工厂,如下所示: FactoryGirl.define do sequence :username do |n| "User#{n}" end factory :user do username email 'user@example.com' password 'password' password_confirmation 'password' end end FactoryGirl.define do

如果我有一个相当标准的
用户
类工厂,如下所示:

FactoryGirl.define do
  sequence :username do |n|
    "User#{n}"
  end
  factory :user do
    username
    email 'user@example.com'
    password 'password'
    password_confirmation 'password'
  end
end
FactoryGirl.define do
  sequence :username do |n|
    "User#{n}"
  end
  factory :user do
    username
    email "#{username}@example.com" # doesn't work
    password 'password'
    password_confirmation 'password'
  end
end
然后一切都像我期望的那样工作,每次都会得到一个唯一的用户名,除非我重写它。但我希望电子邮件基于用户名,如下所示:

FactoryGirl.define do
  sequence :username do |n|
    "User#{n}"
  end
  factory :user do
    username
    email 'user@example.com'
    password 'password'
    password_confirmation 'password'
  end
end
FactoryGirl.define do
  sequence :username do |n|
    "User#{n}"
  end
  factory :user do
    username
    email "#{username}@example.com" # doesn't work
    password 'password'
    password_confirmation 'password'
  end
end
当我试图
构建
一个
用户
时,我得到一个错误
属性已经定义:username


当然,我可以将
电子邮件设置为另一个序列,但是对于覆盖用户名的测试,如果电子邮件与之匹配,消息将更清晰。是否有任何方法可以设置
用户名
,使其自动递增,并在出厂后仍使用其值?

使用块访问当前对象:

  FactoryGirl.define do
    sequence :username do |n|
      "User#{n}"
    end
    factory :user do
      username
      email { |u| "#{u.username}@example.com" }
      password 'password'
      password_confirmation 'password'
    end
  end