RSpec「KeyError: Factory not registered:」エラー解決
プログラミング初学者がRSpecでFactoryBotを使用したテストコードを記述していた際のErrorです。
モデルの単体テストを実装していました。その時に、「KeyError: Factory not registered:」というエラーが発生して苦戦したため、解決方法を自分用にメモを残しておこうと思います。
Error解決の結論はFactoryBotの記述を格納するディレクトリにモデルに対するFactoryBotのファイルが正しく配置されていなかったのが原因でした。
※テストコードを記述するファイルを生成した後からFactoryBotを導入しています。
初歩的なミスでしたので同じようなミスをされる方はいないかと思います。😅
調べた際にいくつか解決策があったので、まとめておきたいと思います。
解決策1
〇〇_spec.rb に下記コードを追加で記述
RSpec.configure do |config|
config.before(:all) do
FactoryBot.reload
end
end
解決策2
ターミナルで spring stopを実行する。
理由は下記の通りです。
「Railsに標準で導入されている『Spring』というGemがバックグラウンドで作動していて、たまにロードエラーを起こしてしまう。その時は、『spring stop』を実行し、Springを一時停止する必要がある」
とのことです。
RubyonRailsのform_withヘルパーメソッドおけるリンクパスの記述方法について
はじめに
・プログラミング学習を開始して1週間の初学者がRuby on Railsに取り組んでいる中で疑問に思った点を言語化し、疑問点を解消、および知識を定着させることを目的とした記事です。
・今回は私がrailsの学習においてform_withヘルパーメソッドなどで指定するリンクパスの記述方法について学習した範囲内でまとめてみました!
●form_withヘルパーメソッド
・オプションにURLを指定するパターン
<%= form_with url: "AAA", method: :post, local: true do |form| %> <%# フォームの内部 %> <% end %>
・modelを使用するパターン
<%= form_with(model: @AAA, local: true) do |form| %> <%# フォームの内部 %> <% end %>
modelオプションで指定している@AAAは対応するコントローラーのアクションで定義したインスタンス変数を使います。
modelオプションを使うことで、わざわざURLで投稿先を指定してあげたりMethodでHTTPメソッドを指定してあげる必要がなくなります。