LoginSignup
6
7

More than 5 years have passed since last update.

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

Posted at

問題

非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が出る

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7