Написание Фабрики вокруг ценностей, которые уже существуют - PullRequest
0 голосов
/ 08 ноября 2011

Я использовал Factory Girl для создания некоторых базовых объектов в разработке, когда я хочу проверить идею, и я обычно сталкиваюсь с этим:

ActiveRecord::RecordInvalid: Validation failed: Email has already been taken, Login has already been taken

Если я запускаю FactoryGirl.create :userв режиме разработки один раз и оставив этого пользователя в БД, мне придется выполнить эту команду дважды, если я попытаюсь сделать это снова после закрытия консоли.По сути, последовательности сбрасываются между экземплярами консоли.

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

1 Ответ

1 голос
/ 08 ноября 2011

Вы можете написать последовательность для этого.

Factory.sequence(:email) do |n|
  "tester#{n}@example.com"
end

Factory.define :user do |f|
  f.name "Tester"
  f.email {Factory.next :email}
  f.password "tester"
end

Источник: примерно на полпути вниз по странице.

EDIT

После перечитывания кажется, что вы пытаетесь создать данные в режиме разработки.

Вы должны использовать для этого файл seed.rb и вести счетчик.

index = User.count || 1

User.create([
  {:email => "user#{index++}@example.com",
   :password => "password"},
  {:email => "user#{index++}@example.com",
   :password => "password"}
])
...