FactoryGirl 电子邮件已被占用
FactoryGirl Email already taken
我正在尝试用 FactoryGirl 实例化多个对象(拥有唯一电子邮件的客人)
guests = create_list(:guest, 3)
但我收到错误消息:
Failure/Error: guests = create_list(:guest, 3)
ActiveRecord::RecordInvalid:
Validation failed: Email has already been taken
这是我的工厂:
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
即使使用 Faker::Internet.unique.email,当我尝试创建超过 1 个来宾时它也不起作用
在你的工厂中使用顺序
FactoryGirl.define do
factory :guest do
sequence(:email) { |n| "name_#{n}@example.com" }
或结合Faker
FactoryGirl.define do
factory :guest do
sequence(:email) { |n| Faker::Internet.unique.email("Nancy_#{n}") }
我正在尝试用 FactoryGirl 实例化多个对象(拥有唯一电子邮件的客人)
guests = create_list(:guest, 3)
但我收到错误消息:
Failure/Error: guests = create_list(:guest, 3)
ActiveRecord::RecordInvalid:
Validation failed: Email has already been taken
这是我的工厂:
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
即使使用 Faker::Internet.unique.email,当我尝试创建超过 1 个来宾时它也不起作用
在你的工厂中使用顺序
FactoryGirl.define do
factory :guest do
sequence(:email) { |n| "name_#{n}@example.com" }
或结合Faker
FactoryGirl.define do
factory :guest do
sequence(:email) { |n| Faker::Internet.unique.email("Nancy_#{n}") }