railsでアプリ開発中、最新のfeatureブランチでリベースしてからアプリを起動しようとした所Factory already registered: user_posts
というエラーが発生し、起動できなくなりました。
(user_posts)の部分は、factory_botの名前です)
結論
同じ名前のfactory_botが既に定義されていた。
user_posts
でコード検索をしてみるとspec/factories/user_posts.rb
と、spec/factories/user/posts.rb
という2箇所のファイルで
factory_botが定義されていました。
user_postsは、UserモデルのモジュールとしてUser::Postで定義されているモデルです。
なので、factoryファイルは spec/factories/user/posts.rb
にあります。
二重定義されているので、spec/factories/user_posts.rb
を削除することでエラーが解消しました!
環境
OS: MacOS
メモリ: 32GB
Dependents
Rails6
Ruby 2.6
CentOS7 on Vagrant
Mysql 5.7
まとめ
今回ハマったポイントとしては、
モジュール定義されているので、user/posts.rb
にfactoryがあると思い込んでいた所です。
おそらく、最初にrailsコマンドでmodel作成した時には、モジュール定義がされておらずuser_posts.rb
でfactoryが作成され、後から手動でモジュール定義に切り替えた事が原因のようです。
後からモデルをモジュール化する場合には、
modelファイルだけでなくspecとfactoryの変更も忘れないようにしたいですね。