Фабрика - в чем цель?

Какая цель Factory Girl в тестах rspec, когда я мог использовать before(:each) блоков? Похоже, что единственная разница между Factory Girl и before(:each) состоит в том, что фабрика подготавливает создание объекта вне теста. Это правильно?


person curiousdork    schedule 03.03.2011    source источник
comment
Вот как FactoryGirl взаимодействует с ActiveReccord cbabhusal.wordpress.com/2015/04/21/   -  person illusionist    schedule 25.04.2015
comment
Ответы здесь кажутся устаревшими и странными.   -  person Nakilon    schedule 06.08.2018


Ответы (3)


Такие драгоценные камни, как Factory Girl и Sham. позволяют создавать шаблоны для допустимых и повторно используемых объектов. Они были созданы в ответ на фикстуры, которые фиксировали записи, которые необходимо было загрузить в базу данных. Они позволяют больше настраивать при создании экземпляров объектов, и их цель - убедиться, что у вас есть допустимый объект для работы. Их можно использовать где угодно в ваших тестах, а также в ваших тестовых хуках до и после.

before (: each), before (: all), after (: each) и after (: all) - все они нацелены на то, чтобы дать вам место для настройки и разборки, которые будут разделены между тестовой группой. Например, если вы собираетесь создавать нового действительного пользователя для каждого отдельного теста, вам нужно сделать это в своем хуке before (: each). Если вы собираетесь удалить некоторые файлы из файловой системы, вы должны сделать это с помощью обработчика before. Если все ваши тесты создают файл tmp, и вы хотите удалить его после теста, вы сделаете это в хуке after (: each) или after (: all).

Эти две концепции различаются тем, что фабрики не нацелены на создание ловушек вокруг ваших тестов, они нацелены на создание действительных объектов и записей Ruby, так что вы можете сохранять гибкость и СУХО создание своих объектов. Перехватчики «до» и «после» предназначены для задач настройки и демонтажа, которые совместно используются в группе примеров, чтобы вы могли сохранить свой код настройки и разрыва «СУХИМ».

person Pan Thomakos    schedule 03.03.2011
comment
Можно сказать иначе: фабрика FactoryGirl похожа на give_me_a_valid_model функцию. Если вам понадобится более одного before :each блока, это избавит вас от необходимости повторения. Чем сложнее настроить эту действительную модель (ассоциации, обеспечение уникальных значений и т. Д.), Тем больше усилий это сэкономит вам. - person Nathan Long; 01.11.2012

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

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

Это проясняет?

person Srdjan Pejic    schedule 03.03.2011
comment
Мне потребовалось некоторое время, чтобы понять, что фабрики - отличная замена светильникам. Мне все еще интересно узнать больше о различиях между макетами и заглушками. - person Docunext; 03.03.2011
comment
Конечно, спасибо. :) Приятно знать, что они хорошая замена светильникам. Это было немного странно, потому что уроки Hartl (которые, кстати, хороши) переходят между приборами и Factory girl. Что меня сбило с толку. Теперь, когда я знаю, я, наверное, буду использовать его чаще. :) - person curiousdork; 05.03.2011

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

Эта книга очень хорошо освещает тему, если вам нужно больше материалов для чтения.

person John Beynon    schedule 03.03.2011