рельсы заводской девушки получают "Электронная почта уже взята" - PullRequest
14 голосов
/ 05 апреля 2011

Это мой заводской код, и каждый раз, когда я пытаюсь сгенерировать обзор, он говорит мне, что «электронная почта уже получена», я сбрасываю свои базы данных, устанавливаю переход в 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

Ответы [ 4 ]

36 голосов
/ 08 октября 2013

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

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

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

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

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

11 голосов
/ 05 апреля 2011

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

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 .

8 голосов
/ 01 июля 2016

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

FactoryGirl.define do
  factory :admin do
    association :band
    email { Faker::Internet.email }
    password "asdfasdf"
    password_confirmation "asdfasdf"
  end
end
3 голосов
/ 28 марта 2017

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
...