¿Cómo uso las fábricas de FactoryGirl en la consola de rieles?

91

Estoy usando la consola rails en el entorno de desarrollo y quiero usar fábricas. ¿Cómo puedo acceder a ellos?

He probado require "FactoryGirl"que devuelve

1.9.3p393 :301 > require "FactoryGirl"
LoadError: cannot load such file -- FactoryGirl
Eric Baldwin
fuente
Una simple búsqueda en Google conduce a varios resultados. ¿Has probado estos? ¿No funcionan? ¿Qué has intentado hasta ahora?
wpp
1
Todos estos están en prueba, quiero hacerlo en desarrollo
Eric Baldwin
2
probablemente desee comenzar con un requisito 'factory_girl' en lugar de requerir la constante FactoryGirl.
Rob Dawson
1
ajustando los tiempos actuales - puede comenzar y rails cluego hacer unrequire 'factory_bot'
RudyOnRails

Respuestas:

39

Para resolver este problema, asegúrese de que la gema del bot de fábrica esté especificada en su Gemfile de manera similar a esta

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

Entonces bundle install.

Esto debería hacer que la clase FactoryBot esté disponible en la consola de desarrollo.

Espero que esto ayude.

cordero
fuente
2
Agregar FactoryGirl en un archivo de gemas como este en lugar de gem 'factory_girl_rails', :require => falsegenerará errores para cualquiera que intente configurar un entorno de desarrollo desde cero, tenga cuidado.
Epigene
4
Esta respuesta funciona, pero la respuesta aceptada debería ser rails console test, le permitirá crear una consola en el entorno de prueba para que no necesite actualizar su Gemfile para usar un paquete de prueba en el entorno de desarrollo
Dylan Pierce
199

Hago esto de la siguiente manera:

  • Inicie la consola de rieles en el entorno de prueba en modo sandbox.

    rails console -e test --sandbox
    

Necesita esto por dos razones:

  1. Todos los cambios que realice se revertirán.
  2. Si ya tiene algunos datos semilla, puede suceder que las fábricas inicien la serialización de atributos desde 1, pero es posible que estos registros ya existan.

Luego en la consola:

  • Requieren FactoryBot (se llamaba FactoryGirl):

    require 'factory_bot'
    
  • Cargue las definiciones de fábrica:

    FactoryBot.find_definitions
    
  • Incluya los métodos FactoryBot para evitar prefijar todas las llamadas a FB con FactoryBot(en createlugar de FactoryBot.create):

    include FactoryBot::Syntax::Methods
    

PD Para la gema de fabricación , puede cargar las definiciones en la consola de rieles con:

Fabrication.manager.load_definitions

También require 'faker'si lo usas.

Alejandro
fuente
¿Debería ser esa última línea require 'ffaker'?
Diedro
Depende de la gema que uses, faker o ffaker, pero estoy de acuerdo en que últimamente ffaker se usa más ampliamente.
Alexander
Me enfrenté a un fixture_file_uploadproblema de método indefinido , causado por la ausencia de ActionDispatch::TestProcessmódulo, por lo que podría considerar incluirlo también
divideByZero
1
Si está reiniciando mucho la consola, aquí hay una sola línea:require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
Mirror318
2
Para Rails 6.0, ejecute la consola así:rails c -e test --sandbox
David Morales
26

Es necesario require 'factory_bot_rails', que es la gema real que está utilizando Rails. Esa joya incluirá la biblioteca Factory Bot, que FactoryBotestará disponible.

Puede hacer esto o actualizar su Gemfile para requerirlo al inicio como en la respuesta de muttonlamb.

Robin Daugherty
fuente
Como estaba usando Faker en mis fábricas, también tuve que correr require 'faker'.
albertski