Everyday Rails – RSpecによるRailsテスト入門でコントローラーにおけるRSpecのテストを学んでいたときに、自分にとって新しい学びがあったのでアウトプットしたいと思います。
問題
本日もRSpecについて勉強していたところ、
reviews_spec.rb
review = FactoryBot.create(:review)
という記述を
reviews_spec.rb
review = create(:review)
という省略系にできることを知り、自分もやってみました。
しかし、「bundle exec rspec」を実行した後、以下のようなエラーが出てしまいました。
ターミナル
Failure/Error: review = create(:review)
NoMethodError:
undefined method `create' for……(以下省略)
「セットアップがうまく行ってなかったのかなぁ…」
と思ったので、伊藤淳一さんのブログ(リンクはこちら)を参考にさせていただきながらRailsのセットアップを見直したり、他にもいろいろ調べていました。
解決策
その結果、rails_helperに次のような記述が必要だったことを知りました。
(参考にさせていただいた記事はこちら)
rails_helper.rb
#一番下に記述してください
RSpec.configure do |config|
config.include FactoryBot::Syntax::Methods
end
この記述が抜けていたために、今回のようなエラーが出ていたようです。
これにより、冒頭にあった
reviews_spec.rb
review = FactoryBot.create(:review)
という記述を
reviews_spec.rb
review = create(:review)
という省略系にすることができました。
今回はcreateメソッドでしたが、buildメソッドで省略系を書きたい時も同様です。