Использование Rspec и FactoryGirl, если у меня есть фабрика, которая автоматически устанавливает значение trait
с использованием последовательности и в некоторых спецификациях, если я явно задал этот признак, с достаточно большим набором тестов, иногда случайные функции завершатьсяПроверки уникальности Rspec/FactoryGirl в большом наборе тестов
Validation failed: uniq_id has already been taken
завод определяется следующим образом:
factory :user { sequence(:uniq_id) {|n| n + 1000} }
Я предполагаю, что это проверка терпит неудачу, потому что в одном месте в моем наборе тестов, я произвожу пользователя, как это:
create(:user, uniq_id: 5555)
И поскольку предположительно фабричная девушка генерирует более 4,555 пользователей по сравнению с набором, проверка не выполняется?
Я пытаюсь избежать этой проблемы, просто повернув uniq_id
на 55555 (большее количество), поэтому никаких помех нет. Но есть ли лучшее решение? Мой spec_helper
включает в себя эти соответствующие биты:
config.use_transactional_fixtures = true
config.after(:all) do
DatabaseCleaner.clean_with(:truncation)
end
Я думаю, что вы можете решить свою проблему на заводских обратных вызовах. Например, вы можете проверить значение уникальности в 'after (: build)' обратном вызове, и если у другого пользователя с таким значением существует триггер 'sequence' снова. – gotva
@gotva это звучит как отличное решение. Можете ли вы разместить ответ и с примером кода для 'after (: build)'? Я не уверен, как использовать последовательность в блоке, и их документы не дают понять. – mehulkar
@gotova выяснил это на самом деле, и это сработало красиво. Спасибо! Добавьте в качестве ответа, чтобы я мог принять и дать вам все очки. – mehulkar