Рельсы 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