##はじめに
Rspecにてテストコードを記述していたところKeyError: Factory not registered
というエラーが出ました。
悩んだ割にはさくっと解決できました。一応記事に残しておきます。
##解決法
まず、私の場合、FactoryBotで定義していたのがこちらになります↓
FactoryBot.define do
factory :progress do
progress_page {300}
comment {"◯◯と◯◯がよくわからなかったから次回詳しく教えて欲しい" }
association :students_textbook
end
end
これアソシエーションでstudents_textbook
という中間テーブルのモデルと繋がっているのですが、このときspecフォルダの中のmodelsフォルダの中にstudents_textbookモデルは作成していません。
しかしながら実際のテストじゃない方では存在するモデルです。
ただ、これは中間テーブルなので特にテストすることもないと思い、作成していませんでした。
しかしエラー文をみるとどうやらfactorybotの方で定義したアソシエーションがどうやら怪しいと思い、rails g rspec:model
で作成しました。
するとうまいこといきました。
##最後に
おそらくアソシエーションで組んでいるモデルがないぞ!というエラーだったのかと思います。実際では存在しますし、これはテストなので一応associationで記載したモデルが存在しないとおかしいよねっということを知らせてくれているのでは?という結論に行きつきました。
ちなみに、specフォルダの中のstudents_textbookモデルは何も記載していません。
もし私の仮説や考え方が間違っている場合指摘していただけると幸いです。