这是我的工厂女孩代码,每次我尝试生成评论时,都会告诉我“电子邮件已被拍摄”,我已重置我的数据库,将spec_helper中的转换设置为true,但仍然是避风港解决了这个问题。我是新来的,我使用该关联错了吗?谢谢!
Factory.define :user do |user|
user.name "Testing User"
user.email "test@example.com"
user.password "foobar"
user.password_confirmation "foobar"
end
Factory.define :course do |course|
course.title "course"
course.link "www.umn.edu"
course.sections 21
course.description "test course description"
course.association :user
end
Factory.define :review do |review|
review.title "Test Review"
review.content "Test review content"
review.association :user
review.association :course
end
答案 0 :(得分:35)
我知道这是一个非常古老的问题,但接受的答案已经过时了,所以我想我应该发布新的方法。
FactoryGirl.define do
sequence :email do |n|
"email#{n}@factory.com"
end
factory :user do
email
password "foobar"
password_confirmation "foobar"
end
end
这很简单,很不错。
答案 1 :(得分:11)
您需要使用序列来阻止使用相同的电子邮件创建用户对象,因为您必须验证用户模型中电子邮件的唯一性。
Factory.sequence :email do |n|
“test#{n}@example.com”
end
Factory.define :user do |user|
user.name "Testing User"
user.email { Factory.next(:email) }
user.password "foobar"
user.password_confirmation "foobar"
end
您可以在Factory Girl documentation中阅读更多内容。
答案 2 :(得分:8)
除了上述答案,您还可以将gem 'faker'
添加到您的Gemfile中,它会提供唯一的电子邮件。
FactoryGirl.define do
factory :admin do
association :band
email { Faker::Internet.email }
password "asdfasdf"
password_confirmation "asdfasdf"
end
end
答案 3 :(得分:3)
sequence
提供真正独特的电子邮件,Faker
提供随机密码。
FactoryGirl.define do
sequence :email do |n|
"user#{n}@test.com"
end
factory :user do
email
password { Faker::Internet.password(8, 20) }
password_confirmation { "#{password}" }
end
end