establish_connection(:other_database) in model is still called in tests

I have to establish connection to a database different than defined for development environment. Here is how I added the specific connection to database.yml:

default: …

development: …

test: …

mystore: adapter: oracle_enhanced host: <%= ENV[‘mystore_db_host’]%> port: <%= ENV[‘mystore_db_port’]%> database: <%= ENV[‘mystore_db_name’]%> username: <%= ENV[‘mystore_db_user’]%> password: <%= ENV[‘mystore_db_password’]%>

``

So I create a base model class as follows:

module MystoreMigration class MystoreModel < ApplicationRecord establish_connection(:mystore) unless Rails.env.test? end end

``

Than I have some model defined that inherit the above class, for example:

module MystoreMigration class StoreInfo < MystoreModel … end end

``

It works fine in development environment but when running tests and mocking the above models, Rails is still trying to establish the connection.

To make it work, I had to add the same environment variables to test section in Figaro gem application.yml file:

development: mystore_db_host: “XXXX” mystore_db_port: “XXXX” mystore_db_name: “XXXX” mystore_db_user: “XXXX” mystore_db_password: “XXXX”

… test: mystore_db_host: “XXXX” mystore_db_port: “XXXX” mystore_db_name: “XXXX” mystore_db_user: “XXXX” mystore_db_password: “XXXX”

``

If I remove the variables from test environment, the following simple test where I mock the model class as follows:

RSpec.describe MystoreMigration::StoreMigrator do

let(:shop) { build(:shop) } let(:store) { double(MystoreMigration::StoreInfo)} let(:store_migrator) { MystoreMigration::StoreMigrator.new([store]) }

describe ‘initialization’ do it ‘should have stores initialized’ do expect(store_migrator.stores).not_to be_empty end end

``

Class under test (just to chesk the constructor):

module MystoreMigration class StoreMigrator

def initialize(stores = ) @stores = stores end …

``

fails with error:

OCIError:

   ORA-12162: TNS:net service name is incorrectly specified

 # oci8.c:561:in oci8lib_250.bundle

 # /Users/Serguei/.rvm/gems/ruby-2.5.0/gems/ruby-oci8-2.2.5.1/lib/oci8/oci8.rb:142:in `initialize'

What’s wrong with that ? Thank you.