Come si utilizzano le factory di FactoryGirl nella console rails


90

Sto usando la console rails nell'ambiente di sviluppo e voglio usare le factory. Come posso accedervi?

Ho provato require "FactoryGirl"quali ritorni

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

Una semplice ricerca su Google porta a diversi risultati. Hai provato questi? Non funzionano? Cosa hai provato fino ad ora?
wpp

1
Questi sono tutti in prova, voglio farlo in fase di sviluppo
Eric Baldwin

2
probabilmente vorrai iniziare con una richiesta "factory_girl" piuttosto che richiedere la costante FactoryGirl.
Rob Dawson

1
adattamento per i tempi attuali - puoi iniziare rails cquindi fare unrequire 'factory_bot'
RudyOnRails

Risposte:


39

Per risolvere questo problema assicurati che la gemma del bot di fabbrica sia specificata nel tuo Gemfile in modo simile a questo

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

Allora bundle install.

Ciò dovrebbe rendere disponibile la classe FactoryBot nella console di sviluppo.

Spero che questo ti aiuti.


2
L'aggiunta di FactoryGirl in gemfile in questo modo anziché gem 'factory_girl_rails', :require => falsegenererà errori per chiunque cerchi di configurare l'ambiente di sviluppo da zero, attenzione.
Epigene

4
Questa risposta funziona, ma la risposta accettata dovrebbe essere rails console test, ti consentirà di creare una console nell'ambiente di test, quindi non è necessario aggiornare il tuo Gemfile per utilizzare un pacchetto di test nell'ambiente di sviluppo
Dylan Pierce

195

Lo faccio nel modo seguente:

  • Avvia la console rails nell'ambiente di test in modalità sandbox.

    rails console -e test --sandbox

Ti serve per due motivi:

  1. Tutte le modifiche apportate vengono annullate.
  2. Se si dispone già di alcuni dati seed, potrebbe accadere che le fabbriche inizino la serializzazione degli attributi da 1, ma questi record potrebbero già esistere.

Quindi nella console:

  • Richiedi FactoryBot (si chiamava FactoryGirl):

    require 'factory_bot'
  • Carica le definizioni di fabbrica:

    FactoryBot.find_definitions
  • Includere i metodi FactoryBot per evitare di anteporre a tutte le chiamate a FB FactoryBot( createinvece di FactoryBot.create):

    include FactoryBot::Syntax::Methods

PS Per la gemma di fabbricazione puoi caricare le definizioni nella console dei binari con:

Fabrication.manager.load_definitions

Anche require 'faker'se lo usi.


L'ultima riga dovrebbe essere require 'ffaker'?
Dihedral

Dipende dalla gemma che usi - falsa o ffaker, ma sono d'accordo che ultimamente ffaker sia più ampiamente utilizzato.
Alexander

Ho riscontrato un fixture_file_uploadproblema di metodo non definito , causato dall'assenza del ActionDispatch::TestProcessmodulo, quindi potresti considerare di includerlo anche
divideByZero

1
Se stai riavviando molto la console, ecco una require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
frase

2
Per Rails 6.0 eseguire la console in questo modo:rails c -e test --sandbox
David Morales,

26

È necessario require 'factory_bot_rails', che è la vera gemma utilizzata da Rails. Quella gemma includerà la libreria Factory Bot, messa a FactoryBotdisposizione.

Puoi farlo o aggiornare il tuo Gemfile per richiederlo all'avvio come nella risposta di muttonlamb.


Dato che usavo Faker nelle mie fabbriche, dovevo anche correre require 'faker'.
albertski
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.