rspec実行時に "NameError:uninitialized constant ActiveSupport::ParameterFilter"


環境

ruby 2.5.1
rails 5.2.4

背景

  1. docker環境を構築
  2. CircleCIを導入
  3. ローカル環境で CircleCI による rspec 実行がうまく作動するかテスト
  4. falseが多く、タイムアウトになったりする
  5. 問題の切り分けをするため、CircleCiではなく、普通にrspecコマンドを実行してみる
  6. 一週間前はなかったタイトルのエラーが発生
$ bundle exec rubocop --require rubocop-airbnb

...
...
...

Failure/Error: get article_url article

     NameError:
       uninitialized constant ActiveSupport::ParameterFilter
     # ./spec/requests/articles_spec.rb:33:in `block (4 levels) in <top (required)>'

結論

gem の"impressionist" のバージョンを変更したら、直りました。

# 変更前
gem 'impressionist'

# 変更後
gem 'impressionist', '~> 1.6.1'

docker や CircleCI を導入する前は正常に作動していたので、database.yml の変更内容や追加した gem などを変更前と比較して、原因を探っていました。
しかし、エラー内容からは問題箇所の特定が難しく、検索したところ以下の記事がヒットし、試したところ直りました。

uninitialized constant ActiveSupport::ParameterFilter

ActiveSupport::ParameterFilterはRails6以降pr#34039によって移動されたクラスです。
impressionistのようにgemによってはrails5以前とrails6以降で追加するべきバージョンが違う場合があります。