2012-04-14 3 views
8

Какова цель фабрик/светильников (я знаю, что фабрики действуют как светильники, но немного яснее), когда вы можете просто использовать ActiveRecord в своем тесте для создания записи в базе данных? т.е. News.create (...)Заводы/Светильники против простого Model.create (...)?

Я просто не вижу каких-либо преимуществ использования Factory Girl вместо того, чтобы просто создать новый скажем новый пользователь, используя методы ActiveRecord ..

Благодаря

ответ

2

Имея Фабрики и после Test Data Building шаблон сделает вас немного работы впереди, но на самом деле вам сэкономить время и работать в будущем.

Предположим, у вас есть модель автомобиля, и у этого автомобиля есть Владелец, и для этого Владельца нужен Адрес. Также у каждого из них есть другие поля. Если вы хотите следовать методу непосредственного использования моделей, вам придется создавать эти объекты (и соответствующие отношения) в каждом определении шага, которое их требует. С фабрикой? Вы будете определить его только один раз.

После того, как вы определили Фабрику в одном месте с соответствующей структурой, все, что вам нужно будет сделать, это попросить автомобиль, и завод возьмет автомобиль всех зависимостей с другими моделями. Разве это не круто? В конце вы хотите, чтобы сосредоточиться на тестировании на этом этапе.

Что это также очень здорово, что вы можете перезаписать конкретные атрибуты, так что вы могли бы, например, что-то вроде этого, если вы хотите перезаписать скорость атрибута:

Given /^I have a car running^/ 
Factory :car, speed => 100 
end 

С моей скромной точки я люблю Factory Girl, потому что он делает мой тестовый код легким для чтения и очень легко читается.

+2

Контр-точки: все эти аргументы применимы и к светильникам. Светильники быстрее в целом. Любые другие причины? – DGM

+0

@DGM Несмотря на то, что я использую, и мне нравится светильники, мне когда-то их трудно поддерживать. –

2

Фабрики позволяют вы установите тестовую настройку в один файл. Например, моя проектная фабрика находится в spec/support/factories/project_factory.rb.

Если я хочу изменить название по умолчанию или добавить другой атрибут, я делаю это в одном файле. С AR, разбрызганным повсюду во время моих тестов, мне нужно будет изменить это в каждом отдельном случае этого использования.

5

Фабрики

Создает/строит объект, а затем использовать его только тогда, когда призвали в испытании.

Вы определяете «счастливый путь» объекта, включая ассоциации, в одном файле (как упоминалось Райан), а затем просто поддерживаете один файл, когда ваши ассоциации схемы/модели меняются.

Светильники

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

Светильники являются конечным состоянием модели и живут в базе данных, поэтому загружаются один раз и могут использоваться в тестах по вашему усмотрению.

Несколько файлов, и вы размещаете файлы вашего файла, чтобы каждый файл и ассоциация были позабочены.

NewModel.create (...)

создается один раз и используется один раз в одном тесте или в одном блоке before(:each)

Если у вас есть 100 таких блоков, то есть писать и поддерживать 100 различных объектов, не говоря уже об ассоциации как @user.profile.create(....) 100 раз.

Преимущества Фабрики над NewModel.create

Один файл для сохранения, а не заменяя и оглавлению мультипликатор build или create в ваших строках кода.

Примечание Надо сказать, что в моем наборе тестов я хочу, чтобы это было как можно быстрее, поэтому я сбросив FactoryGirl и использования Светильники и NewModel.create двигаться вперед. Просто чтобы посмотреть, ускорит ли он это. Я работаю над теорией о том, что FG замедляет мой сюиту, а также let() и before(:each)

Смежные вопросы