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

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.


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.


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.


Ponieważ używałem Fakera w swoich fabrykach, musiałem też biegać require 'faker'.
albertski
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.