問題
非ActiveRecord環境でテストを実行しようとしたときにActiveRecord関係のエラーが発生し、手こずったのでメモ。
エラー文はこちら。
Failure/Error: Unable to find matching line from backtrace
ActiveRecord::ConnectionNotEstablished:
ActiveRecord::ConnectionNotEstablished
解決方法
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ファイルを作成し、以下の内容を記述する。
ActiveRecord.module_eval do
remove_const :TestFixtures
end
これをspec_helper.rbファイルの require 'rspec/rails'
の前で呼び出す。
require_relative "../lib/monkey_patches/active_record"
require 'rspec/rails'
# require 'active_record/railtie'
ついでにメモ
作成したディレクトリ名にもあるモンキーパッチって何かと思ったら、コードを変更することなく実行時にコードを拡張・変更する方法のことなんですね。
参考
ActiveRecord::ConnectionNotEstablishedのエラーについて
非ActiveRecord環境でRails 4.1にアップデートするとActiveRecord::ConnectionNotEstablishedが出る