Какая разница между методами сборки и создания в FactoryGirl?
Ввод Factory Girl определяет разницу между FactoryGirl.build()
и FactoryGirl.create()
:
# Returns a User instance that not saved
user = FactoryGirl.build(:user)
# Returns a saved User instance
user = FactoryGirl.create(:user)
Я до сих пор не понимаю практических различий между ними. Может ли кто-нибудь дать пример, где вы хотели бы использовать один, а не другой? Спасибо!
Ответы
Ответ 1
Метод create()
сохраняет экземпляр модели, в то время как метод build()
сохраняет его только в памяти.
Лично я использую метод create()
только тогда, когда настойчивость действительно необходима, так как запись в БД делает тестирование временем.
например.
Я создаю пользователей для аутентификации с помощью create()
, потому что мой механизм проверки подлинности запрашивает DB.
Чтобы проверить, имеет ли модель атрибут метод build()
, потому что не требуется доступ к БД.
it{Factory.build(:user).should respond_to(:name)}
Update
"Существует одно исключение, которое создает на самом деле" создает ", когда вы строите ассоциации, т.е. ваша связь больше не в памяти, а сохраняется. Помните об этом" - Shakes
Ответ 2
Использование FactoryGirl.build(: factory_name) не сохраняется в db и не вызывает save!, поэтому ваши проверки ActiveRecord не будут выполняться. Это намного быстрее, но валидации могут быть важны.
Использование FactoryGirl.create(: factory_name) будет сохраняться в db и будет вызывать проверки ActiveRecord. Это, очевидно, медленнее, но может ловить ошибки проверки (если вы заботитесь о них в своих тестах).