Factory not registered というエラーへの対処法
はじめに
RspecでFactoryBotを使用した際、エラーが出たので内容と解決方法を書きます。
今回は以下の記事を参考にしました。
masawada.hatenablog.jp
エラー内容
$ bin/rspec Failure/Error: let(:user){ FactoryBot.build(:user) } KeyError: Factory not registered: "user" # ./spec/models/user_spec.rb:4:in `block (2 levels) in <main>' # ./spec/models/user_spec.rb:7:in `block (2 levels) in <main>' # -e:1:in `<main>' # ------------------ # --- Caused by: --- # KeyError: # key not found: "user" # ./spec/models/user_spec.rb:4:in `block (2 levels) in <main>'
前回使用した際は出なかったエラーです。
参考にした記事によるとspringのせいらしい...
解決策
今回は下記のようにspec/support内のファイルを読み込むようにしていました。
spec/rails_helper.rb ・・・ Dir[Rails.root.join('spec', 'support', '**', '*.rb')].sort.each { |f| require f } #デフォルトはコメントアウトされています。 ・・・
ですので、spec/suport/factorybot.rbというファイルを作成し、以下の内容を追加しました。
rspec/suport/factorybot.rb RSpec.configure do |config| config.before(:all) do FactoryBot.reload end end
これでエラーを回避できたのでひと段落だと思ったのですが、
コンソール上でFactoryBotを使用するとエラーが...
$ rails c --sandbox irb(main):002:0> FactoryBot.create(:user) Traceback (most recent call last): 2: from (irb):1 1: from (irb):2:in `rescue in irb_binding' KeyError (Factory not registered: "user")
途方に暮れていましたが、gem'factory_bot_rails'
を再インストールしたところ治りました...