ГоловнаВсі публікаціїКатегоріїПро проєкт

[Фікс] 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, яка дуже часто використовується для генерації контенту у фабриках. Вона зекономить час та дозволить створити об'єкти більш схожими на реальні.
Як працює модель штучного інтелекту?
15.09.2024 16:42

Як працює модель штучного інтелекту?

meme code
meme code@memecode
Що означає реляційний (в контексті реляційних баз даних)?
21.09.2024 08:27

Що означає реляційний (в контексті реляційних баз даних)?

meme code
meme code@memecode
Що таке RDBMS (relational database management system / реляційна система управління базами даних)?
21.09.2024 08:56

Що таке RDBMS (relational database management system / реляційна система управління базами даних)?

meme code
meme code@memecode
 Що означає ACID принцип у програмуванні?
24.09.2024 20:31

Що означає ACID принцип у програмуванні?

meme code
meme code@memecode
Що таке Сonvention over Сonfiguration (в контексті RoR і не тільки)?
26.09.2024 07:47

Що таке Сonvention over Сonfiguration (в контексті RoR і не тільки)?

meme code
meme code@memecode
Округлення десяткових чисел: математичні правила, JavaScript і Ruby
18.10.2024 12:59

Округлення десяткових чисел: математичні правила, JavaScript і Ruby

meme code
meme code@memecode
Що таке PORO в Ruby?
08.12.2024 12:46

Що таке PORO в Ruby?

meme code
meme code@memecode
Чим відрізняються spec_helper.rb і rails_helper.rb у RSpec?
08.12.2024 13:53

Чим відрізняються spec_helper.rb і rails_helper.rb у RSpec?

meme code
meme code@memecode
09.12.2024 14:50

[Фікс] No such file or directory @ rb_sysopen - tmp/pids/server.pid

meme code
meme code@memecode
Що потрібно знати, щоб побудувати успішну кар'єру на фрілансі в IT
23.12.2024 16:03

Що потрібно знати, щоб побудувати успішну кар'єру на фрілансі в IT

meme code
meme code@memecode
Віртуальний хмарний сервер: що це таке та в чому його особливість
03.01.2025 10:58

Віртуальний хмарний сервер: що це таке та в чому його особливість

meme code
meme code@memecode
[Fix] Heroku / SearchBox addon - помилка ідексації "The client is unable to verify that the server is Elasticsearch"
31.01.2025 13:09

[Fix] Heroku / SearchBox addon - помилка ідексації "The client is unable to verify that the server is Elasticsearch"

meme code
meme code@memecode