2008-10-17 2 views
15

Есть дюжина плагинов Rails, целью которых является замена светильников при тестировании. Вот несколько я могу думать:Предпочитаемый плагин замены светильников в Rails?

  • замена светильника
  • завода девушка
  • фабрики и рабочие
  • рельсов сценарии
  • арматуры-сценарии
  • объекта папа

Возможно, есть и другие. Какой из этих плагинов вы предпочитаете и почему?

ответ

6

Я лично использую Faker с пользовательским классом Factory. Это позволяет мне создавать мои фабрики и заполнять сгенерированные экземпляры нестационарными данными.

# spec/factory.rb 
module Factory 
    def self.create_offer(options={}) 
    Offer.create({ 
     :code => Faker::Lorem.words(1), 
     :expires_on => Time.now + (rand(30) + 1).day 
    }.merge(options)) 
    end 
end 


# spec_helper.rb 
require 'faker' 
require 'spec/factory' 


# In the specs 
@offer = Factory.create_offer(:code => 'TESTING') 
3

+1 завод девушка

+0

проголосовало за "девушку" – DFectuoso 2009-01-08 18:27:55

3

Мы только начали использовать Factory Girl для наших проектов. Его способ делать вещи не сильно отличался от нашего домашнего решения, поэтому он хорошо работает для нас.

4

Я буду защищать Fixture Replacement 2. Ваши атрибуты модели по умолчанию (не заботятся) сохраняются в одном месте, db/example_data.rb и обеспечивают быстродействующие объекты. Любые атрибуты, которые вы указываете при создании, переопределяют атрибуты по умолчанию - это означает, что данные, которые вы ухаживания, это в тесте, и ничего больше.

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

Версия 2 обеспечивает намного более четкий формат определения, при этом обеспечивая при этом магические методы new_*, create_*, and default_* для каждой модели.

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

P.S. Удостоверьтесь, что вы также оцениваете свою стратегию тестирования . Светильники и все их аналоги являются реальными объектами, которые попадают в БД, что делает их функциональными или интеграционными. В настоящее время я использую RSpec для насмешки вместе с stub_model() и последним камнем unit_record, чтобы запретить доступ к БД.

3

Я большой поклонник фабрики, когда вам нужен только один или несколько объектов. Вы можете либо написать свой собственный, либо использовать Thoughtbot's Factory Girl.

Для ситуаций, когда вам нужен кураторский набор взаимосвязанных объектов, светильники избиты фабрикой, и вы должны взглянуть на отличный Lite Fixtures, который делает светильники значительно более сухими и управляемыми.

0

Фабрика Девушка великолепна. Мы используем его в рабочих нагрузках.

Factory.define :usa, :class => Team do |f| 
    f.country_name 'USA' 
    f.rank   15.6 
end 

Factory.define :player do |f| 
    f.first_name 'Stevie' 
    f.last_name 'Wonder' 
    f.team  Factory.build(:usa) 
end 

Затем в спецификации вы можете использовать Factory.build(:usa) или Factory.create(:usa) построить или создать команду США соответственно.

4

Я могу дать Factory Girl плюс один. Способ, которым он может связываться между несколькими Фабриками, действительно полезен, когда у вас есть несколько нормальный набор моделей. Например, у Проекта есть один руководитель проекта.

Factory.define :project_manager do |f| 
    f.first_name "John" 
    f.last_name "Doe" 
end 

Factory.define :project do |f| 
    f.name "Sample Project" 
    f.association :project_manager 
end 

Таким образом, вам не нужно беспокоиться о фактической настройке отношений в каждом тесте. Он также может выполнять некоторую работу, например, Faker, где вы можете создавать образцы данных на фабриках с использованием Factory.sequence. Для всей информации о Factory Girl, проверьте: http://dev.thoughtbot.com/factory_girl/.

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