Как использовать фабрики FactoryGirl в консоли rails


91

Я использую консоль rails в среде разработки и хочу использовать фабрики. Как я могу получить к ним доступ?

Я пробовал, require "FactoryGirl"что возвращается

1.9.3p393 :301 > require "FactoryGirl"
LoadError: cannot load such file -- FactoryGirl

Простой Google поиск приводит к нескольким результатам. Вы пробовали это? Они не работают? что ты уже испробовал?
wpp

1
Все они проходят тестирование, я хочу сделать это в разработке
Эрик Болдуин,

2
вы, вероятно, захотите начать с требования factory_girl, а не с константы FactoryGirl.
Роб Доусон

1
корректировка на текущее время - вы можете начать, а rails cзатем сделатьrequire 'factory_bot'
RudyOnRails

Ответы:


39

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

group :development, :test do
  gem 'factory_bot_rails'
end

Тогда bundle install.

Это должно сделать класс FactoryBot доступным в консоли разработки.

Надеюсь это поможет.


2
Добавление FactoryGirl в такой гем-файл вместо этого gem 'factory_girl_rails', :require => falseвызовет ошибки у всех, кто пытается настроить среду разработки с нуля, будьте осторожны.
Epigene

4
Этот ответ работает, но должен быть принят принятый ответ rails console test: он позволит вам создать консоль в тестовой среде, поэтому вам не нужно обновлять Gemfile, чтобы использовать тестовый пакет в среде разработки,
Дилан Пирс,

199

Я делаю это следующим образом:

  • Запустите консоль rails в тестовой среде в режиме песочницы.

    rails console -e test --sandbox
    

Вам это нужно по двум причинам:

  1. Любые сделанные вами изменения откатываются.
  2. Если у вас уже есть исходные данные, может случиться так, что фабрики начнут сериализацию атрибутов с 1, но эти записи могут уже существовать.

Затем в консоли:

  • Требуется FactoryBot (назывался FactoryGirl):

    require 'factory_bot'
    
  • Загрузите заводские определения:

    FactoryBot.find_definitions
    
  • Включите методы FactoryBot, чтобы избежать префикса всех вызовов FB с FactoryBot( createвместо FactoryBot.create):

    include FactoryBot::Syntax::Methods
    

PS Для изготовления гема вы можете загрузить определения в консоль рельсов с помощью:

Fabrication.manager.load_definitions

Также, require 'faker'если вы его используете.


Должна ли быть последняя строчка require 'ffaker'?
Диэдр

Это зависит от того, какой драгоценный камень вы используете - faker или ffaker, но я согласен, что в последнее время ffaker более широко используется.
Александр

Я столкнулся с fixture_file_uploadпроблемой неопределенного метода , которая была вызвана отсутствием ActionDispatch::TestProcessмодуля, поэтому вы можете подумать о том, чтобы включить его также
divByZero

1
Если вы часто перезагружаете консоль, вот require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
краткая фраза

2
Для Rails 6.0 запустите консоль следующим образом:rails c -e test --sandbox
Дэвид Моралес

26

Вам нужно require 'factory_bot_rails', а это настоящий гем, который используется Rails. Этот драгоценный камень будет включать в себя библиотеку Factory Bot, которая станет FactoryBotдоступной.

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


Поскольку я использовал Faker на своих фабриках, мне также приходилось бежать require 'faker'.
Альбертски
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.