Como faço para usar as fábricas da FactoryGirl no console Rails

90

Estou usando console rails no ambiente de desenvolvimento e quero usar fábricas. Como posso ter acesso a eles?

Eu tentei o require "FactoryGirl"que retorna

1.9.3p393 :301 > require "FactoryGirl"
LoadError: cannot load such file -- FactoryGirl
Eric Baldwin
fonte
Uma simples pesquisa no google levou a vários resultados. Você já experimentou isso? Eles não estão funcionando? O que você tentou até agora?
wpp
1
Estão todos em teste, quero fazê-lo em desenvolvimento
Eric Baldwin
2
você provavelmente vai querer começar com um require 'factory_girl' em vez de exigir a constante FactoryGirl.
Rob Dawson de
1
ajustando para os tempos atuais - você pode começar rails ce fazer umrequire 'factory_bot'
RudyOnRails de

Respostas:

39

Para resolver este problema, certifique-se de que a gem do bot de fábrica é especificada em seu Gemfile semelhante a este

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

Então bundle install.

Isso deve tornar a classe FactoryBot disponível no console de desenvolvimento.

Espero que isto ajude.

carneiro
fonte
2
Adicionar FactoryGirl em gemfile como este, em vez de gem 'factory_girl_rails', :require => falseirá gerar erros para qualquer um que tentar configurar o ambiente de desenvolvimento do zero.
Epigene
4
Esta resposta funciona, mas a resposta aceita deve ser rails console test, ela permitirá que você crie um console no ambiente de teste para que você não precise atualizar seu Gemfile para usar um pacote de teste no ambiente de desenvolvimento
Dylan Pierce
195

Eu faço isso da seguinte maneira:

  • Inicie o console do Rails no ambiente de teste no modo sandbox.

    rails console -e test --sandbox

Você precisa disso por dois motivos:

  1. Todas as alterações feitas são revertidas.
  2. Se você já possui alguns dados iniciais, pode acontecer que as fábricas iniciem a serialização de atributos a partir de 1, mas esses registros já podem existir.

Em seguida, no console:

  • Requer FactoryBot (era chamado de FactoryGirl):

    require 'factory_bot'
  • Carregue as definições de fábrica:

    FactoryBot.find_definitions
  • Inclua os métodos FactoryBot para evitar prefixar todas as chamadas ao FB com FactoryBot(em createvez de FactoryBot.create):

    include FactoryBot::Syntax::Methods

PS Para joia de fabricação, você pode carregar as definições no console do trilho com:

Fabrication.manager.load_definitions

Também require 'faker'se você usar.

Alexandre
fonte
Essa última linha deveria ser require 'ffaker'?
Diédrico
Depende de qual gema você usa - faker ou ffaker, mas eu concordo que ultimamente o ffaker é mais amplamente usado.
Alexander
Eu enfrentei um fixture_file_uploadproblema de método indefinido , que foi causado pela ausência do ActionDispatch::TestProcessmódulo, então você pode considerar incluí-lo também
divideByZero
1
Se você está reiniciando muito o console, aqui está um one-liner:require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
Mirror318
2
Para Rails 6.0, execute o console assim:rails c -e test --sandbox
David Morales
26

Você precisa require 'factory_bot_rails', que é a verdadeira jóia que está sendo usada pelo Rails. Essa joia incluirá a biblioteca do Factory Bot, FactoryBotdisponibilizando.

Você pode fazer isso ou atualizar seu Gemfile para exigi-lo na inicialização, como na resposta de muttonlamb.

Robin Daugherty
fonte
Como estava usando o Faker em minhas fábricas, também tive que fugir require 'faker'.
albertski