FactoryGirl电子邮件已被收取

Xer*_*ero 1 ruby ruby-on-rails factory-bot

我试图与FactoryGirl实例化多个对象(具有唯一电子邮件的来宾)

  guests = create_list(:guest, 3)
Run Code Online (Sandbox Code Playgroud)

但是我得到了错误:

 Failure/Error: guests = create_list(:guest, 3)

 ActiveRecord::RecordInvalid:
   Validation failed: Email has already been taken
Run Code Online (Sandbox Code Playgroud)

这是我的工厂:

FactoryGirl.define do
  factory :guest do
    email Faker::Internet.unique.email
    firstname 'John'
    lastname  'Doe'
    password 'test'
    password_confirmation 'test'

    factory :guest_with_bookings do
      email "#{SecureRandom.hex}@test.com"
      transient do
        bookings_count 2
      end
      after(:create) do |guest, evaluator|
        create_list(:booking, evaluator.bookings_count, guests: [guest])
      end
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

即使使用Faker :: Internet.unique.email,当我尝试创建1位以上的访客时,它也不起作用

Ser*_*ell 5

在您的工厂中使用顺序

FactoryGirl.define do
  factory :guest do
    sequence(:email) { |n| "name_#{n}@example.com" }
Run Code Online (Sandbox Code Playgroud)

或与Faker结合使用

FactoryGirl.define do
  factory :guest do
    sequence(:email) { |n| Faker::Internet.unique.email("Nancy_#{n}") }
Run Code Online (Sandbox Code Playgroud)