【RSpec】モデル単体テスト実行時の「MissingAttributeError」を解決する
はじめに
RSpecを用いたテスト時のエラーでつまずいたので、備忘録としてまとめます。
環境
Ruby 2.6.5
Rails 6.0.3.6
状況
Twitterのような投稿アプリを作成中です。FactoryBotを用いて、投稿に関するPostモデルの単体テストを実行したところ、「MissingAttributeError」が出ました。以下に詳細を記します。
FactoryBot
FactoryBot.define do
factory :post do
# 省略
association :user
# 省略
end
end
association :userは、users.rbのFactoryBotとアソシエーションがあることを意味しています。つまり、Postのインスタンスが生成したと同時に、関連するUserのインスタンスも生成されます。
exampleを書き出し、試しにテストを実行するとエラー発生
ActiveModel::MissingAttributeError:
can't write unknown attribute `user_id`
「user_idという属性は知らないよ」という内容です。
postsテーブルを確認
テーブルのカラムを確認していくと、user_idカラムがありませんでした。
マイグレーションファイルを確認
t.references :user の記述を忘れており、テーブル作成時にuser_idカラムが作られなかったことがわかりました。
user_idカラムを追加し、エラー解決
カラムの追加方法は、他の方の分かりやすい記事がありますので、ご参考ください。
私はこちらを参考にさせていただきました。
https://qiita.com/kurawo___D/items/e3694f7a870a1cc4738e
まとめ
postはuserに紐付いているため、FactoryBotでassociation :userと記述し、紐付くuserデータを同時生成しようとしました。
しかし、postテーブルにuser_idカラムがなかったため、紐付かせることができず、エラーが出てしましました。
最後に
初めての投稿で分かりづらい部分が多々あるかと思いますが、どなたかの参考になれば幸いです。
Author And Source
この問題について(【RSpec】モデル単体テスト実行時の「MissingAttributeError」を解決する), 我々は、より多くの情報をここで見つけました https://qiita.com/seaturtle_m_o/items/b79b151db724f4a71142著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .