Як я можу використовувати заводи від FactoryGirl у консолі рейок


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 у gemfile, подібне до цього, замість цього gem 'factory_girl_rails', :require => falseпризведе до помилок для тих, хто намагається налаштувати середовище розробки з нуля, остерігайтеся.
Епіген

4
Ця відповідь працює, але прийнята відповідь повинна бути rails console test, це дозволить вам створити консоль у тестовому середовищі, тому вам не потрібно оновлювати ваш Gemfile, щоб використовувати тестовий пакет у середовищі розробки
Ділан Пірс,

197

Я роблю це наступним чином:

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

    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'?
Діедраль

Це залежить від того, який дорогоцінний камінь ви використовуєте - факер чи ffaker, але я погоджуюсь, що останнім часом ffaker застосовується все ширше.
Олександр

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

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, щоб вимагати його під час запуску, як у відповіді muttonlamb.


Оскільки я використовував Faker на своїх заводах, мені також довелося бігати require 'faker'.
albertski
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.