Factory Girl - какова цель? - PullRequest
60 голосов
/ 03 марта 2011

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

Ответы [ 3 ]

63 голосов
/ 03 марта 2011

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

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

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

16 голосов
/ 03 марта 2011

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

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

Это делает его более понятным?

6 голосов
/ 03 марта 2011

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

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

...