铁路工厂女孩得到"电子邮件已被采取"

ran*_*mor 14 ruby-on-rails factory-bot

这是我的工厂女孩​​代码,每次我尝试生成一个评论时,它告诉我"电子邮件已经被拍摄",我重置了我的数据库,将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
Run Code Online (Sandbox Code Playgroud)

Are*_*rel 36

我知道这是一个非常古老的问题,但是接受的答案已经过时了,所以我想我应该发布新的方法.

FactoryGirl.define do
  sequence :email do |n|
    "email#{n}@factory.com"
  end

  factory :user do
    email
    password "foobar"
    password_confirmation "foobar"
  end
end
Run Code Online (Sandbox Code Playgroud)

资料来源:文件

这有点简单,这很好.


And*_*all 11

您需要使用序列来阻止使用相同的电子邮件创建用户对象,因为您必须验证User模型中电子邮件的唯一性.

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
Run Code Online (Sandbox Code Playgroud)

您可以在Factory Girl文档中阅读更多内容.


Mic*_*ael 8

除了上述答案,您还可以添加gem 'faker'到Gemfile中,它将提供唯一的电子邮件.

FactoryGirl.define do
  factory :admin do
    association :band
    email { Faker::Internet.email }
    password "asdfasdf"
    password_confirmation "asdfasdf"
  end
end
Run Code Online (Sandbox Code Playgroud)


ask*_*kov 5

sequence提供真正独特的电子邮件并Faker提供随机密码。

FactoryGirl.define do
  sequence :email do |n|
    "user#{n}@test.com"
  end

  factory :user do
    email
    password { Faker::Internet.password(min_length: 8, max_length:20) }
    password_confirmation { "#{password}" }
  end
end
Run Code Online (Sandbox Code Playgroud)