Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
Podczas konfigurowania testów w nowym projekcie, w którym jest kilka modeli - User, Post i tak dalej. Wszystkie fabryki rejestrowały się normalnie, z wyjątkiem User.
Loading development environment (Rails 7.0.4.3) irb(main):001:0> FactoryBot.create(:user) /Users/memecode/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/hash_with_indifferent_access.rb:194:in `fetch': Factory not registered: "user" (KeyError) /Users/memecode/.rbenv/versions/3.2.1/lib/ruby/gems/3.2.0/gems/activesupport-7.0.4.3/lib/active_support/hash_with_indifferent_access.rb:194:in `fetch': key not found: "user" (KeyError)
Wywołanie FactoryBot.factories również potwierdziło, że wszystkie fabryki oprócz User są zarejestrowane. Po poszukiwaniach przyczyny okazało się, że zainstalowano po prostu bibliotekę FactoryBot, a potrzebny nam jest FactoryBot dla Rails.
Naprawiamy błąd rejestracji fabryki (Factory not registered: "user")
Więc zmieniamy:
gem 'factory_bot', '~> 6.5'
na
gem 'factory_bot_rails', '~> 6.4', '>= 6.4.4'
Oczywiście uruchamiamy
bundle
I wszystko zacznie działać. factory_bot_rails ma w zależnościach factory_bot, więc potrzebujemy tylko biblioteki w naszym Gemfile.
Jaka jest różnica między factory_bot a factory_bot_rails?
factory_bot — to główna biblioteka do pracy z fabrykami, swojego rodzaju "proste narzędzie Ruby". Kiedy potrzebujesz prostego i niezawodnego sposobu na tworzenie danych testowych w Ruby, to właśnie factory_bot zajmuje się tym zadaniem.
Umożliwia definiowanie fabryk, które tworzą modele z wygodnymi ustawieniami. Na przykład, chcesz wygenerować użytkownika? Zamiast ręcznie wpisywać wszystkie parametry, factory_bot automatycznie je wypełni za Ciebie. Ale jest jeden warunek: musisz samodzielnie zadbać o to, jak te fabryki będą ładowane w Twoim projekcie, szczególnie jeśli to coś bardziej skomplikowanego niż standardowa aplikacja Rails.
A co z factory_bot_rails? To raczej "asystent", stworzony po to, aby uczynić pracę z factory_bot w Rails jak najbardziej bezproblemową.
Wyobraź sobie, że masz dużą aplikację Rails, w której jest kilka dziesiątek modeli i testów. Zamiast za każdym razem ręcznie konfigurować połączenie fabryk, factory_bot_rails robi to automatycznie. Integruje się z testowym środowiskiem Rails i gwarantuje, że wszystkie fabryki będą gotowe do użycia. Co więcej, dodaje kilka przydatnych komend do Rails, na przykład do szybkiego tworzenia fabryk dla nowych modeli.
Można więc powiedzieć, że factory_bot — to podstawa, a factory_bot_rails — to opakowanie, które sprawia, że ta podstawa jest wygodna dla programistów Rails. Działają razem: pierwszy zapewnia funkcjonalność, a drugi — komfort. Jeśli masz aplikację Rails, wystarczy, że użyjesz tylko factory_bot_rails, ponieważ zawiera już wszystko, co potrzebne. Ale jeśli chcesz używać fabryk poza Rails lub dostosować je do swoich potrzeb, wtedy potrzebujesz właśnie factory_bot.
Warto też wspomnieć o bibliotece Faker, która jest bardzo często używana do generowania treści w fabrykach. Zaoszczędzi czas i pozwoli stworzyć obiekty bardziej przypominające rzeczywiste.
Ten post nie ma jeszcze żadnych dodatków od autora.