Обкладинка нотатки: [Фікс] Factory not registered: "user" (KeyError) (FactoryBot / Rails 7)

[Фікс] Factory not registered: "user" (KeyError) (FactoryBot / Rails 7)

Зміст дописунатисність на посилання, щоб перейти до потрібного місця
При налаштуванні тестів в новому проєкті, де є кілька моделей - User, Post і так далі. Всі factories реєструвались нормально, крім 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)
Виклик FactoryBot.factories також підтвердив, що всі factories окрім User зареєстровані. Після пошуків причини, виявилось що просто було інстальовано лібу FactoryBot, а нам потрібен FactoryBot для Rails.

Фіксимо помилку реєстрації фабрики (Factory not registered: "user")

Тож міняємо:
  gem 'factory_bot', '~> 6.5'
на
  gem 'factory_bot_rails', '~> 6.4', '>= 6.4.4'
Звісно ж запускаємо
bundle
І все запрацює. factory_bot_rails має в залежностях factory_bot, тож нам потрібна лише ліба у нашому Gemfile.

В чому різниця між factory_bot та factory_bot_rails?

factory_bot — це основна ліба для роботи з фабриками, свого роду "простий Ruby інструмент". Коли вам потрібен простий і надійний спосіб створення тестових даних у Ruby, саме factory_bot береться за цю задачу.
Він дозволяє визначати фабрики, які створюють моделі зі зручними налаштуваннями. Наприклад, хочете згенерувати користувача? Замість того, щоб прописувати всі параметри вручну, factory_bot автоматично заповнить їх за вас. Але є одна умова: ви повинні самостійно подбати про те, як ці фабрики будуть завантажуватись у вашому проєкті, особливо якщо це щось складніше за стандартний Rails-додаток.
А що ж factory_bot_rails? Це скоріше "помічник", створений для того, щоб зробити роботу з factory_bot у Rails максимально безшовною.
Уявіть, що у вас є великий Rails-додаток, де кілька десятків моделей і тестів. Замість того, щоб щоразу вручну налаштовувати підключення фабрик, factory_bot_rails робить це автоматично. Він інтегрується з тестовим середовищем Rails і гарантує, що всі фабрики будуть готові до використання. Більше того, він додає кілька корисних команд у Rails, наприклад, для швидкого створення фабрик під нові моделі.
Отже, можна сказати, що factory_bot — це основа, а factory_bot_rails — це обгортка, яка робить цю основу зручною саме для Rails-розробників. Вони працюють разом: перший забезпечує функціональність, а другий — комфорт. Якщо у вас Rails-додаток, вам буде достатньо лише factory_bot_rails, адже він вже містить усе необхідне. Але якщо ви хочете використовувати фабрики поза Rails або кастомізувати їх під свої потреби, тоді знадобиться саме factory_bot.
Ну і варто згадати лібу Faker, яка дуже часто використовується для генерації контенту у фабриках. Вона зекономить час та дозволить створити об'єкти більш схожими на реальні.
Категорії: Програмування

🔗 Цитувати допис: "[Фікс] Factory not registered: "user" (KeyError) (FactoryBot / Rails 7)"

Якщо ви хочете процитувати цей допис у своїй роботі, статті, блозі, використовуйте наведену нижче інформацію.

Розгорнути деталі


🙌 Підтримати блог @memecode

Ви можете поширити цей допис у соцмережах, чим допоможете платформі цейво розвиватись (* ^ ω ^)

📝 Більше публікацій:
Обкладинка нотатки: Як працює модель штучного інтелекту?
Обкладинка нотатки: Що означає реляційний (в контексті реляційних баз даних)?
Обкладинка нотатки: Що таке RDBMS (relational database management system / реляційна система управління базами даних)?
Обкладинка нотатки:  Що означає ACID принцип у програмуванні?
Обкладинка нотатки: Що таке Сonvention over Сonfiguration (в контексті RoR і не тільки)?
Обкладинка нотатки: Округлення десяткових чисел: математичні правила, JavaScript і Ruby
Обкладинка нотатки: Що таке PORO в Ruby?
Обкладинка нотатки: Чим відрізняються spec_helper.rb і rails_helper.rb у RSpec?
Обкладинка нотатки: Що потрібно знати, щоб побудувати успішну кар'єру на фрілансі в IT
Обкладинка нотатки: Віртуальний хмарний сервер: що це таке та в чому його особливість
Дисклеймер

Інформація на сайті tseivo.com є суб'єктивною та відображає особисті погляди та досвід авторів та авторок блогів.

Використовуйте цей ресурс як одне з декількох джерел інформації під час своїх досліджень та прийняття рішень. Завжди застосовуйте критичне мислення. Людина сама несе відповідальність за свої рішення та дії.