Jak używać fabryk z FactoryGirl w konsoli szyn

91

Używam konsoli rails w środowisku programistycznym i chcę korzystać z fabryk. Jak mogę uzyskać do nich dostęp?

Próbowałem, require "FactoryGirl"który powraca

1.9.3p393 :301 > require "FactoryGirl"
LoadError: cannot load such file -- FactoryGirl
Eric Baldwin
źródło
Prosty google wyszukiwania prowadzą do kilku wyników. Czy próbowałeś tego? Czy one nie działają? Czego spróbowałeś do tej pory?
wpp
1
To wszystko jest w fazie testów, chcę to zrobić w fazie rozwoju
Eric Baldwin
2
prawdopodobnie chciałbyś zacząć od wymaganej wartości „factory_girl” zamiast wymagać stałej FactoryGirl.
Rob Dawson,
1
dostosowując się do aktualnych czasów - możesz zacząć, rails ca potem zrobićrequire 'factory_bot'
RudyOnRails

Odpowiedzi:

39

Aby rozwiązać ten problem, upewnij się, że fabryczny klejnot bota jest określony w twoim pliku Gemfile podobnie do tego

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

Wtedy bundle install.

Powinno to spowodować udostępnienie klasy FactoryBot w konsoli programistycznej.

Mam nadzieję że to pomoże.

baranina
źródło
2
Dodanie FactoryGirl w takim pliku gemfile zamiast gem 'factory_girl_rails', :require => falsewyrzucać błędy dla każdego, kto próbuje skonfigurować środowisko programistyczne od zera, uwaga.
Epigene
4
Ta odpowiedź działa, ale akceptowana odpowiedź powinna brzmieć rails console test, pozwoli ci stworzyć konsolę w środowisku testowym, więc nie musisz aktualizować swojego Gemfile, aby używać pakietu testowego w środowisku programistycznym
Dylan Pierce
199

Robię to w następujący sposób:

  • Uruchom konsolę rails w środowisku testowym w trybie piaskownicy.

    rails console -e test --sandbox
    

Potrzebujesz tego z dwóch powodów:

  1. Wszelkie wprowadzone zmiany zostaną cofnięte.
  2. Jeśli masz już jakieś dane początkowe, może się zdarzyć, że fabryki rozpoczną serializację atrybutów od 1, ale te rekordy mogą już istnieć.

Następnie w konsoli:

  • Wymagaj FactoryBot (nazywał się FactoryGirl):

    require 'factory_bot'
    
  • Załaduj definicje fabryczne:

    FactoryBot.find_definitions
    
  • Uwzględnij metody FactoryBot, aby uniknąć przedrostków wszystkich wywołań FB z FactoryBot( createzamiast FactoryBot.create):

    include FactoryBot::Syntax::Methods
    

PS W przypadku klejnotu produkcyjnego możesz załadować definicje w konsoli szyn za pomocą:

Fabrication.manager.load_definitions

Również require 'faker'jeśli go używasz.

Aleksandra
źródło
Czy powinna to być ostatnia linijka require 'ffaker'?
Dwuścienny
Zależy to od tego, jakiego klejnotu używasz - fakera czy ffakera, ale zgadzam się, że ostatnio ffaker jest szerzej używany.
Alexander,
Mam do czynienia metody niezdefiniowanej fixture_file_uploadproblem, który został spowodowany przez brak ActionDispatch::TestProcessmodułu, więc można rozważyć włączenie go również
divideByZero
1
Jeśli często restartujesz konsolę, oto jedna linijka:require "factory_bot_rails"; include FactoryBot::Syntax::Methods; require 'ffaker'
Mirror318,
2
Dla Rails 6.0 uruchom konsolę w następujący sposób:rails c -e test --sandbox
David Morales
26

Musisz require 'factory_bot_rails', czyli prawdziwy klejnot używany przez Railsy. Ten klejnot będzie zawierał bibliotekę Factory Bot, FactoryBotudostępniając ją.

Możesz to zrobić lub zaktualizować plik Gemfile, aby wymagał go przy starcie, jak w odpowiedzi baraniny.

Robin Daugherty
źródło
Ponieważ używałem Fakera w swoich fabrykach, musiałem też biegać require 'faker'.
albertski