Я подозреваю, что происходит то, что FactoryGirl сбрасывает значение n
при каждом вызове с autospec
, но база данных не очищается.
Сначала, чтобы проверить этот диагноз, измените свою фабрикук следующему:
Factory.define :email_address do |e|
e.sequence(:address) { |n| puts "Email ##{n}"; "factory_#{n}@example.com" }
e.validated true
end
Если мой диагноз правильный, есть два возможных исправления:
- изменить FactoryGirl, чтобы начать с индекса, превышающего максимальный используемый ID.Это может привести к серьезному взлому
Factory::Sequence
- вам, вероятно, придется повернуть Factory::Sequence.sequences
с Hash[Symbol => Proc]
на Hash[Symbol => [Proc, Integer]
, который помнит самый высокий индекс, который он использовал.Действительно, это может даже не сработать, поскольку autospec действительно , похоже, правильно выгружает классы FactoryGirl (в противном случае поиск последовательности не приведет к сбою и созданию нового объекта Factory::Sequence
). - выяснить, почему ваша база данных не очищается между каждым запуском autospec.Вы проверили свои методы демонтажа?Поддерживает ли ваша тестовая база данных транзакции?