← strona głównaProgramowanie (Програмування)

[Fix] Fabryka nie zarejestrowana: "user" (KeyError) (FactoryBot / Rails 7)

Naprawiamy błąd rejestracji fabryki w Rails (Factory not registered: "user" (KeyError)). Opis bibliotek factory_bot i factory_bot_rails.

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.

🔥 Więcej postów

Wszystkie wpisy
Jak działa model sztucznej inteligencji?
Komputery i technologie (Комп'ютери та технології)15 wrz '24 16:42

Jak działa model sztucznej inteligencji?

Jak działa model sztucznej inteligencji? Główne etapy pracy modelu SI. Problemy i ograniczenia te...

Co oznacza zasada ACID w programowaniu?
Programowanie (Програмування)24 wrz '24 20:31

Co oznacza zasada ACID w programowaniu?

ACID — to zestaw właściwości, które gwarantują niezawodność działania transakcji w bazach danych....

Co to jest PORO w Ruby?
Programowanie (Програмування)8 gru '24 12:46

Co to jest PORO w Ruby?

Czym jest PORO (Plain Old Ruby Object) w Ruby, jak go używać do pisania zrozumiałego kodu. Dlacze...