RSpec「KeyError: Factory not registered:」エラー解決

プログラミング初学者がRSpecでFactoryBotを使用したテストコードを記述していた際のErrorです。

 

モデルの単体テストを実装していました。その時に、「KeyError: Factory not registered:」というエラーが発生して苦戦したため、解決方法を自分用にメモを残しておこうと思います。

 

Error解決の結論はFactoryBotの記述を格納するディレクトリにモデルに対するFactoryBotのファイルが正しく配置されていなかったのが原因でした。
※テストコードを記述するファイルを生成した後からFactoryBotを導入しています。

初歩的なミスでしたので同じようなミスをされる方はいないかと思います。😅

 

調べた際にいくつか解決策があったので、まとめておきたいと思います。

 

解決策1

〇〇_spec.rb に下記コードを追加で記述

 

spec/〇〇_spec.rb
 
RSpec.configure do |config|
  config.before(:all) do
    FactoryBot.reload
  end
end

 

解決策2

ターミナルで spring stopを実行する。

理由は下記の通りです。

Railsに標準で導入されている『Spring』というGemがバックグラウンドで作動していて、たまにロードエラーを起こしてしまう。その時は、『spring stop』を実行し、Springを一時停止する必要がある」
とのことです。

 

 

Ruby on rails ユーザー登録機能の実装の流れ(devise)

rails ユーザー登録機能の実装(devise)
・Gemfileにてgem ' deivse'を記述→bundle install
・devise専用の設定ファイルを自動生成 rails g devise:instal
・モデルを作成 rails g devise モデル名
 ルーティングにdevise_for :userと記述されdeviseで使用するルーティングを自動生成される。
・テーブルの作成 rails db:migrate
・veiwファイルの呼び出し rails g devise:views
 deviseに用意されたviewファイルがapp/viewsの配下に配置される。

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メソッドを指定してあげる必要がなくなります。