Comment utiliser les usines de FactoryGirl dans la console de rails

90

J'utilise la console rails dans l'environnement de développement et je souhaite utiliser des usines. Comment puis-je y accéder?

J'ai essayé require "FactoryGirl"ce qui revient

1.9.3p393 :301 > require "FactoryGirl"
LoadError: cannot load such file -- FactoryGirl
Eric Baldwin
la source
Une simple recherche Google mène à plusieurs résultats. Avez-vous essayé ces derniers? Ne fonctionnent-ils pas? Qu'est-ce que tu as essayé jusque-là?
wpp
1
Ce sont tous en test, je veux le faire en développement
Eric Baldwin
2
vous voudrez probablement commencer avec un require 'factory_girl' plutôt que d'exiger la constante FactoryGirl.
Rob Dawson
1
ajustement pour les heures actuelles - vous pouvez commencer rails cpuis faire unrequire 'factory_bot'
RudyOnRails

Réponses:

39

Pour résoudre ce problème, assurez-vous que la gemme du bot d'usine est spécifiée dans votre Gemfile de la même manière

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

Alors bundle install.

Cela devrait rendre la classe FactoryBot disponible dans la console de développement.

J'espère que cela t'aides.

agneau de mouton
la source
2
L'ajout de FactoryGirl dans un fichier gemfile comme celui-ci au lieu de générer des gem 'factory_girl_rails', :require => falseerreurs pour quiconque essaie de configurer l'environnement de développement à partir de zéro, méfiez-vous.
Epigene
4
Cette réponse fonctionne, mais la réponse acceptée devrait être rails console test, elle vous permettra de créer une console dans l'environnement de test afin que vous n'ayez pas besoin de mettre à jour votre Gemfile pour utiliser un package de test dans l'environnement de développement
Dylan Pierce
195

Je fais cela de la manière suivante:

  • Démarrez la console rails dans l'environnement de test en mode bac à sable.

    rails console -e test --sandbox

Vous en avez besoin pour deux raisons:

  1. Toutes les modifications que vous effectuez sont annulées.
  2. Si vous avez déjà des données de départ, il se peut que les usines lancent la sérialisation des attributs à partir de 1, mais ces enregistrements peuvent déjà exister.

Puis dans la console:

  • Exiger FactoryBot (s'appelait FactoryGirl):

    require 'factory_bot'
  • Chargez les définitions d'usine:

    FactoryBot.find_definitions
  • Incluez les méthodes FactoryBot pour éviter de préfixer tous les appels à FB avec FactoryBot( createau lieu de FactoryBot.create):

    include FactoryBot::Syntax::Methods

PS Pour le bijou de fabrication, vous pouvez charger les définitions dans la console des rails avec:

Fabrication.manager.load_definitions

Aussi require 'faker'si vous l'utilisez.

Alexandre
la source
Cette dernière ligne devrait require 'ffaker'-elle être ?
Dihedral
Cela dépend de la gemme que vous utilisez - faker ou ffaker, mais je suis d'accord que ces derniers temps, ffaker est plus largement utilisé.
Alexander
J'ai rencontré un fixture_file_uploadproblème de méthode non défini , causé par l'absence de ActionDispatch::TestProcessmodule, vous pouvez donc envisager de l'inclure également
divideByZero
1
Si vous redémarrez souvent la console, voici un one-liner:require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
Mirror318
2
Pour Rails 6.0, exécutez la console comme ceci:rails c -e test --sandbox
David Morales
26

Vous devez le faire require 'factory_bot_rails', qui est le joyau utilisé par Rails. Ce joyau comprendra la bibliothèque Factory Bot, mise à FactoryBotdisposition.

Vous pouvez soit le faire, soit mettre à jour votre Gemfile pour l'exiger au démarrage comme dans la réponse de muttonlamb.

Robin Daugherty
la source
Parce que j'utilisais Faker dans mes usines, je devais aussi courir require 'faker'.
albertski le