前提・実現したいこと
Ruby On Railsにて、RSpecを用いたテスト開発を行っています。
テストを一通り終え、「rails s」を行ったところ、下記のエラーメッセージが返されました。
当該エラーを解決する方法について、ご教示頂きたく存じます。
エラーメッセージ
spec/factories/factory_bot.rb:3:in `<main>': undefined method `configure' for RSpec:Module (NoMethodError)
上記エラーが生じている「factory_bot.rb」は、下記の通りです。
factory_bot.rb
ruby
1require 'factory_bot' 2RSpec.configure do |config| 3 config.include FactoryBot::Syntax::Methods 4 config.before :all do 5 FactoryBot.reload 6 end 7end
確認できていること
- bundle exec rspec によるテスト実行は正常に行われます。
疑問に感じていること
- なぜ、rails sでサーバーを起動したただけなのに、Factory_bot.rbが呼び出されたのか。
→私の理解では、factory_botは、bundle exec rspecでテストを実行した時に呼び出されるものであって、rails sによって、呼びされるものではないと考えておりました。
下記にて、当該事象に関係があるのではないか、と考えるファイルを記載いたします。
.rspec
ruby
1--require rails_helper 2--color 3--format documentation
rails_helper.rb
ruby
1ENV['RAILS_ENV'] = 'test' 2require File.expand_path('../../config/environment', __FILE__) 3abort("The Rails environment is running in production mode!") if Rails.env.production? 4 5require 'simplecov' 6require 'capybara/rspec' 7require 'factory_bot' 8require 'shoulda-matchers' 9require 'vcr' 10require 'spec_helper' 11require 'rspec/rails' 12 13# テスト実行前に未実行のmigrationファイルを検知して実行する 14begin 15 ActiveRecord::Migration.maintain_test_schema! 16rescue ActiveRecord::PendingMigrationError => e 17 puts e.to_s.strip 18 exit 1 19end 20 21# support/config配下のファイルを読み込み 22Dir[Rails.root.join("spec/support/config/*.rb")].each { |f| require f } 23Dir[Rails.root.join("spec/support/helper/*.rb")].each { |f| require f } 24 25RSpec.configure do |config| 26 # テスト全体の前に実行する処理をブロックで記述 27 config.before(:suite) do 28 # データベースをCleanする方法を'transaction'に指定 29 DatabaseCleaner.strategy = :transaction 30 # このタイミングで'transaction'でデータベースをCleanしておく 31 DatabaseCleaner.clean_with(:truncation) 32 end 33 34 # 各exampleの前および後に実行する処理をブロックで記述 35 config.around(:each) do |example| 36 DatabaseCleaner.cleaning do 37 # ここに処理を記述する 38 # ここがexampleの実行タイミング 39 example.run 40 # ここに処理を記述する ## 41 end 42 end 43 44 # focusタグがあればそれだけ実行、なければ全spec実行 45 config.filter_run focus: true 46 config.run_all_when_everything_filtered = true 47 48 # ロードするfixtureのパスを指定 49 config.fixture_path = "#{::Rails.root}/spec/fixtures" 50 51 # ディレクトリ構成によってspec typeを自動判別する設定 52 config.infer_spec_type_from_file_location! 53 54 # spec実行後のbacktrace表示を簡素化 55 config.filter_rails_from_backtrace! 56 57 # RSpecの実行前に1度、DBM 58 config.before(:suite) do 59 DatabaseCleaner.clean 60 end 61 62 # rspecでいうexample、turnipでいうシナリオが終わるごとにDBの初期化 63 config.before(:each) do 64 DatabaseCleaner.clean 65 end 66 67 # 最後に1度、実行 68 config.after(:suite) do 69 DatabaseCleaner.clean 70 end 71end
###spec_helper.rb
ruby
1require 'simplecov' 2 3SimpleCov.start 'rails' 4 5RSpec.configure do |config| 6 # focusタグがあればそれだけ実行、なければ全spec実行 7 config.filter_run focus: true 8 config.run_all_when_everything_filtered = true 9 10 # specをランダム実行 11 config.order = :random 12 13end
補足情報(FW/ツールのバージョンなど)
- Rails 6.1.3.1
- RSpec 3.10
- factory_bot_rails 6.2.0
まとめ
- 上記エラーを解決する方法やヒントなど頂きたく存じます
また、足りない情報やその他必要な情報がありましたら、ご教示いただければ幸いです。
至らない箇所が諸処あるかと存じますが、何卒よろしくお願い致します。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。