Рельсы factory девушка получает "Электронная почта уже была сделана"

Это мой код девушки factory, и каждый раз, когда я пытаюсь создать обзор, он говорит мне, что "электронная почта уже была сделана", у меня есть reset мои базы данных, установите переход в spec_helper в true, но все еще не решили проблему. Я новичок в этом, я неправильно использую ассоциацию? Спасибо!

Factory.define :user do |user|
  user.name                  "Testing User"
  user.email                 "[email protected]"
  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

Ответ 1

Вам нужно использовать последовательность, чтобы предотвратить создание пользовательских объектов с тем же адресом электронной почты, так как вы должны иметь валидацию уникальности писем в своей модели пользователя.

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 Документация для девушек.

Ответ 2

Я знаю, что это довольно старый вопрос, но принятый ответ устарел, поэтому я решил, что должен опубликовать новый способ сделать это.

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

  factory :user do
    email
    password "foobar"
    password_confirmation "foobar"
  end
end

Источник: Документация

Это немного проще, что приятно.

Ответ 3

В дополнение к приведенным выше ответам вы можете добавить gem 'faker' в свой Gemfile и предоставить уникальные электронные письма.

FactoryGirl.define do
  factory :admin do
    association :band
    email { Faker::Internet.email }
    password "asdfasdf"
    password_confirmation "asdfasdf"
  end
end

Ответ 4

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