Posted at

【RSpec】非ActiveRecord環境でActiveRecord::ConnectionNotEstablishedが出たときの対処法

More than 5 years have passed since last update.


問題

非ActiveRecord環境でテストを実行しようとしたときにActiveRecord関係のエラーが発生し、手こずったのでメモ。

エラー文はこちら。

Failure/Error: Unable to find matching line from backtrace

ActiveRecord::ConnectionNotEstablished:
ActiveRecord::ConnectionNotEstablished


解決方法


spec_helper.rbをチェック


spec_helper.rb

require 'rspec/rails'

require 'active_record/railtie'

active_record/railtie.rbファイルはActiveRecordを初期化したりするものですが、そもそもActiceRecordを使わないので初期化などの必要なし。

ということで require 'active_record/railtie' をコメントアウト。


それでも同じエラーが出る

こちらの記事(非ActiveRecord環境でRails 4.1にアップデートするとActiveRecord::ConnectionNotEstablishedが出る)を参考にすると解決しました。

原因と解決方法を引用すると、


何かの拍子でActiveRecordが読み込まれると、specがtestのfixturesを作ろうとしてしまうので、ActiveRecordをいなかったことにする。


とのこと。

記事を参考に、libディレクトリにmonkey_patchesディレクトリを作成し、その中にactive_record.rbファイルを作成し、以下の内容を記述する。


active_record.rb

ActiveRecord.module_eval do

remove_const :TestFixtures
end

これをspec_helper.rbファイルの require 'rspec/rails' の前で呼び出す。


spec_helper.rb

require_relative "../lib/monkey_patches/active_record"

require 'rspec/rails'
# require 'active_record/railtie'


ついでにメモ

作成したディレクトリ名にもあるモンキーパッチって何かと思ったら、コードを変更することなく実行時にコードを拡張・変更する方法のことなんですね。


参考

ActiveRecord::ConnectionNotEstablishedのエラーについて

非ActiveRecord環境でRails 4.1にアップデートするとActiveRecord::ConnectionNotEstablishedが出る