【发布时间】:2017-06-14 23:35:48
【问题描述】:
我正在尝试用 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 个访客时它也不起作用
【问题讨论】:
-
似乎答案是“sequence :email do |n| "person#{n}@example.com" end" 但我不明白
-
您是否在测试运行之间清除数据库?
-
@sergey-mell 提供了很好的答案,但实际上您只是忘记使用 block
email { each_time_code }所以代码"#{SecureRandom.hex}@test.com"执行了 one 时间并且factory 每次都尝试使用相同的固定电子邮件创建来宾。
标签: ruby-on-rails ruby factory-bot