You need to give your test mode a safe DB to talk to, Rails will not like not having a connection.
Again this has nothing to do with RSpec, RSpec is not configuring anything it is all Rails. You will need to have `RAILS_ENV=“test”` somewhere before Rails is loaded in order for your bypass to work, and if theres another `establish_connection` somewhere it will override it. Also if you are using spring you will need to restart it when modifying this check. Jon Rowe --------------------------- [email protected] jonrowe.co.uk On Friday, 29 June 2018 at 10:05, belgoros wrote: > > > On Thursday, 28 June 2018 13:57:18 UTC+2, Jon Rowe wrote: > > Without knowing the specifics of the figaro gem I would wager yes, as they > > would appear to be blank. > > OK, figaro gem (https://github.com/laserlemon/figaro) makes it possible to > separate the variables by environment > (https://github.com/laserlemon/figaro#environment-specific-configuration) in > its appication.yml file. > If I add mystore connection variables to test environment in application.yml, > - IT WORKS. > What is weird is that why RSpec is trying to check the connection to mystore > and ignores the below check in my base model class: > > module MystoreMigration > class MystoreModel < ApplicationRecord > establish_connection(:mystore) unless Rails.env.test? > end > end > > A simple test fails even if I use double to mock a mystore related model: > > require 'rails_helper' > > > 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 > > Here is the class under test: > > require_relative 'store_schedule_period' > require_relative 'store_welcome' > > > module MystoreMigration > class StoreMigrator > > MIGRATOR = 'mystore.store.migrator'.freeze > DEFAULT_SHOP_CATEGORY = 'decathlon'.freeze > > attr_reader :stores > > def initialize(stores = []) > @stores = stores > end > > ... > > Is it Rails loading stuff or smth else ? > Sure, I would not like to connect to mystore database in test mode and do > whatever operations. That's why I'll have to mock all the methods calls to it. > Any idea ? Thank you. > > > > > > > Jon Rowe > > --------------------------- > > [email protected] (javascript:) > > jonrowe.co.uk (http://jonrowe.co.uk) > > > > > > On Thursday, 28 June 2018 at 12:52, Serguei Cambour wrote: > > > > > I have the following environment variables for mystore environment in > > > database.yml: > > > > > > 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']%> > > > > > > defined in 'development' section in application.yml (I'm using Figaro > > > gem): > > > > > > development: > > > mystore_db_port: "XXXX" > > > mystore_db_name: "XXXX" > > > mystore_db_user: "XXXX" > > > mystore_db_password: "XXXX" > > > > > > test: > > > client_id: "XXX" > > > client_secret: "XXX > > > .... > > > > > > Should I add them to test section as well ? > > > > > > On Thu, 28 Jun 2018 at 09:37, Jon Rowe <[email protected] > > > (javascript:)> wrote: > > > > Sorry, no it doesn’t, RSpec doesn’t do *any* database connection work. > > > > > > > > Your code is trying to access the database :mystore from your > > > > `config/database.yml` as thats what you’ve told it to do, perhaps your > > > > environment variables are empty on your local machine? > > > > > > > > Jon Rowe > > > > --------------------------- > > > > [email protected] (javascript:) > > > > jonrowe.co.uk (http://jonrowe.co.uk) > > > > > > > > > > > > On Wednesday, 27 June 2018 at 16:06, belgoros wrote: > > > > > > > > > > > > > > > > > > > On Wednesday, 27 June 2018 17:04:35 UTC+2, belgoros wrote: > > > > > > > > > > > > > > > > > > On Wednesday, 27 June 2018 16:26:36 UTC+2, Jon Rowe wrote: > > > > > > > > Sure, I'd like to write some tests and I had an impression that > > > > > > > > when accessing a class that used mystore connection, RSpec > > > > > > > > tried to use the default connection defined in test group of > > > > > > > > database.yml. Is the way I'm truing to do that in testing > > > > > > > > correct ? > > > > > > > > > > > > > > No, RSpec doesn’t do *any* database configuration, Rails will use > > > > > > > the environment named configuration by default, but > > > > > > > `establish_connection` *should* override it. > > > > > > > > > > > > > > If it’s not behaving as you expect you might want to check that > > > > > > > Rails is loading your files correctly (as until > > > > > > > `establish_connection` is called you won’t have configured the > > > > > > > other database). > > > > > > > > > > > > Finally, it does not work as expected when using > > > > > > > > > > > > establish_connection(:mystore) unless Rails.env.test? > > > > > > If I use just > > > > > > > > > > > > establish_connection(:mystore) > > > > > > > > > > > > I have another error when calling new on one of the mystore DB > > > > > > models: > > > > > > > > > > > > ORA-12162: TNS:net service name is incorrectly specified > > > > > > Does RSpec tries to access mystore_test table ? > > > > > > > > > > > Sorry, I meant mystore_test database. Thank you. > > > > > > > > > > > > > > Cheers > > > > > > > > > > > > > > Jon Rowe > > > > > > > --------------------------- > > > > > > > [email protected] > > > > > > > jonrowe.co.uk (http://jonrowe.co.uk) > > > > > > > > > > > > > > > > > > > > > On Wednesday, 27 June 2018 at 14:48, Serguei Cambour wrote: > > > > > > > > > > > > > > > Thank you John ! > > > > > > > > What I need is to migrate some data from one DB (mystore > > > > > > > > connection) to another. That's why I had to write some specific > > > > > > > > Rake tasks to match tables attributes to be imported (mystore > > > > > > > > connection) to another DB defined in development group in > > > > > > > > database.yml. Sure, I'd like to write some tests and I had an > > > > > > > > impression that when accessing a class that used mystore > > > > > > > > connection, RSpec tried to use the default connection defined > > > > > > > > in test group of database.yml. Is the way I'm truing to do that > > > > > > > > in testing correct ? Thank you. > > > > > > > > > > > > > > > > > > > > > > > > On Wed, 27 Jun 2018 at 15:43, Jon Rowe <[email protected]> > > > > > > > > wrote: > > > > > > > > > Sorry I misunderstood your question! > > > > > > > > > > > > > > > > > > What you need to do is specify multiple environments for your > > > > > > > > > second database, so you can establish an environment specific > > > > > > > > > connection. As you can see from your own configuration thats > > > > > > > > > the standard pattern, so you could then use > > > > > > > > > `establish_connection` with the appropriate db e.g. > > > > > > > > > `establish_connection(:”mystore_#{Rails.env}”)` and have a > > > > > > > > > test version of your second DB > > > > > > > > > > > > > > > > > > Cheers > > > > > > > > > Jon Rowe > > > > > > > > > --------------------------- > > > > > > > > > [email protected] > > > > > > > > > jonrowe.co.uk (http://jonrowe.co.uk) > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wednesday, 27 June 2018 at 14:06, belgoros wrote: > > > > > > > > > > > > > > > > > > > I had to modify my base class by adding > > > > > > > > > > unless Rails.env.test? > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > condition: > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > module MystoreMigration > > > > > > > > > > class MystoreModel < ActiveRecord::Base > > > > > > > > > > self.abstract_class = true > > > > > > > > > > establish_connection(:mystore) unless Rails.env.test? > > > > > > > > > > end > > > > > > > > > > end > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > All other model classes used by rake tasks inherit from the > > > > > > > > > > above model. In this case I'll have to mock all the DB > > > > > > > > > > calls related to this rake task to avoid it to establish > > > > > > > > > > mystore connection defined in `database.yml` and used by > > > > > > > > > > all the tasks models. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > On Wednesday, 27 June 2018 14:16:22 UTC+2, Jon Rowe wrote: > > > > > > > > > > > Hi Javix > > > > > > > > > > > > > > > > > > > > > > RSpec itself has no database integration so it's > > > > > > > > > > > certainly possible, you'll need to either configure a > > > > > > > > > > > connection manually to talk through or use however you'd > > > > > > > > > > > normally talk to your other database. > > > > > > > > > > > > > > > > > > > > > > If you’re using rspec-rails you’ll need to figure out how > > > > > > > > > > > Rails does it’s transactional testing for multiple > > > > > > > > > > > databases, but most 3rd party gems support “cleaning” > > > > > > > > > > > multiple databases, including DatabaseCleaner. > > > > > > > > > > > > > > > > > > > > > > HTH > > > > > > > > > > > Jon > > > > > > > > > > > > > > > > > > > > > > On Wed, 27 Jun 2018 at 09:53, Javix <[email protected]> > > > > > > > > > > > wrote: > > > > > > > > > > > > I need to execute some rake tasks agains a database > > > > > > > > > > > > other than defined in database.yml, test group. Here is > > > > > > > > > > > > how database.yml looks like: > > > > > > > > > > > > > > > > > > > > > > > > default: &default > > > > > > > > > > > > adapter: postgresql > > > > > > > > > > > > encoding: unicode > > > > > > > > > > > > user: postgres > > > > > > > > > > > > password: > > > > > > > > > > > > pool: 5 > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > development: > > > > > > > > > > > > <<: *default > > > > > > > > > > > > database: decastore_development > > > > > > > > > > > > host: <%= ENV['DECASTORE_DATABASE_HOST'] %> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > test: > > > > > > > > > > > > <<: *default > > > > > > > > > > > > database: decastore_test > > > > > > > > > > > > host: <%= ENV['DECASTORE_DATABASE_HOST'] %> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > production: > > > > > > > > > > > > <<: *default > > > > > > > > > > > > host: <%= ENV['DECASTORE_DATABASE_HOST'] %> > > > > > > > > > > > > database: XXXX > > > > > > > > > > > > username: XXXXX > > > > > > > > > > > > password: <%= ENV['DECASTORE_DATABASE_PASSWORD'] %> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > 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']%> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Is it possible to mix 2 database settings when running > > > > > > > > > > > > tests or I have to mock it everywhere ? > > > > > > > > > > > > Thank you. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > > > > > > > > You received this message because you are subscribed to > > > > > > > > > > > > the Google Groups "rspec" group. > > > > > > > > > > > > To unsubscribe from this group and stop receiving > > > > > > > > > > > > emails from it, send an email to > > > > > > > > > > > > [email protected]. > > > > > > > > > > > > To post to this group, send email to > > > > > > > > > > > > [email protected]. > > > > > > > > > > > > To view this discussion on the web visit > > > > > > > > > > > > https://groups.google.com/d/msgid/rspec/f723fd63-26b2-4ff7-a9ff-b8a3a69567f3%40googlegroups.com > > > > > > > > > > > > > > > > > > > > > > > > (https://groups.google.com/d/msgid/rspec/f723fd63-26b2-4ff7-a9ff-b8a3a69567f3%40googlegroups.com?utm_medium=email&utm_source=footer). > > > > > > > > > > > > For more options, visit > > > > > > > > > > > > https://groups.google.com/d/optout. > > > > > > > > > > -- > > > > > > > > > > You received this message because you are subscribed to the > > > > > > > > > > Google Groups "rspec" group. > > > > > > > > > > To unsubscribe from this group and stop receiving emails > > > > > > > > > > from it, send an email to [email protected]. > > > > > > > > > > To post to this group, send email to [email protected]. > > > > > > > > > > To view this discussion on the web visit > > > > > > > > > > https://groups.google.com/d/msgid/rspec/b5fa5aad-7a2a-4b53-875f-8bda30682c1d%40googlegroups.com > > > > > > > > > > > > > > > > > > > > (https://groups.google.com/d/msgid/rspec/b5fa5aad-7a2a-4b53-875f-8bda30682c1d%40googlegroups.com?utm_medium=email&utm_source=footer). > > > > > > > > > > For more options, visit https://groups.google.com/d/optout. > > > > > > > > > > > > > > > > > > -- > > > > > > > > > You received this message because you are subscribed to a > > > > > > > > > topic in the Google Groups "rspec" group. > > > > > > > > > To unsubscribe from this topic, visit > > > > > > > > > https://groups.google.com/d/topic/rspec/sbRqzLR_Lug/unsubscribe. > > > > > > > > > To unsubscribe from this group and all its topics, send an > > > > > > > > > email to [email protected]. > > > > > > > > > To post to this group, send email to [email protected]. > > > > > > > > > To view this discussion on the web visit > > > > > > > > > https://groups.google.com/d/msgid/rspec/74587C34A93D431CB66AE4B35D84EC2B%40jonrowe.co.uk > > > > > > > > > > > > > > > > > > (https://groups.google.com/d/msgid/rspec/74587C34A93D431CB66AE4B35D84EC2B%40jonrowe.co.uk?utm_medium=email&utm_source=footer). > > > > > > > > > For more options, visit https://groups.google.com/d/optout. > > > > > > > > -- > > > > > > > > You received this message because you are subscribed to the > > > > > > > > Google Groups "rspec" group. > > > > > > > > To unsubscribe from this group and stop receiving emails from > > > > > > > > it, send an email to [email protected]. > > > > > > > > To post to this group, send email to [email protected]. > > > > > > > > To view this discussion on the web visit > > > > > > > > https://groups.google.com/d/msgid/rspec/CAJGQ%3DvbsA2GkxtTuUCqKSChAe8YRf-Yeafv68qgSFvQ5X8qCXw%40mail.gmail.com > > > > > > > > > > > > > > > > (https://groups.google.com/d/msgid/rspec/CAJGQ%3DvbsA2GkxtTuUCqKSChAe8YRf-Yeafv68qgSFvQ5X8qCXw%40mail.gmail.com?utm_medium=email&utm_source=footer). > > > > > > > > For more options, visit https://groups.google.com/d/optout. > > > > > > > > > > > > -- > > > > > You received this message because you are subscribed to the Google > > > > > Groups "rspec" group. > > > > > To unsubscribe from this group and stop receiving emails from it, > > > > > send an email to [email protected] (javascript:). > > > > > To post to this group, send email to [email protected] > > > > > (javascript:). > > > > > To view this discussion on the web visit > > > > > https://groups.google.com/d/msgid/rspec/4b796b81-d1ce-4109-827f-efccf085d743%40googlegroups.com > > > > > > > > > > (https://groups.google.com/d/msgid/rspec/4b796b81-d1ce-4109-827f-efccf085d743%40googlegroups.com?utm_medium=email&utm_source=footer). > > > > > For more options, visit https://groups.google.com/d/optout. > > > > > > > > -- > > > > You received this message because you are subscribed to a topic in the > > > > Google Groups "rspec" group. > > > > To unsubscribe from this topic, visit > > > > https://groups.google.com/d/topic/rspec/sbRqzLR_Lug/unsubscribe. > > > > To unsubscribe from this group and all its topics, send an email to > > > > [email protected] (javascript:). > > > > To post to this group, send email to [email protected] > > > > (javascript:). > > > > To view this discussion on the web visit > > > > https://groups.google.com/d/msgid/rspec/2EDF7B26264448B5BE512774CA7A042F%40jonrowe.co.uk > > > > > > > > (https://groups.google.com/d/msgid/rspec/2EDF7B26264448B5BE512774CA7A042F%40jonrowe.co.uk?utm_medium=email&utm_source=footer). > > > > For more options, visit https://groups.google.com/d/optout. > > > -- > > > You received this message because you are subscribed to the Google Groups > > > "rspec" group. > > > To unsubscribe from this group and stop receiving emails from it, send an > > > email to [email protected] (javascript:). > > > To post to this group, send email to [email protected] (javascript:). > > > To view this discussion on the web visit > > > https://groups.google.com/d/msgid/rspec/CAJGQ%3DvY8y2mYyC44DTTm2qppoCzCw11LvDv7%3DdC6eVyRJG%3DeMw%40mail.gmail.com > > > > > > (https://groups.google.com/d/msgid/rspec/CAJGQ%3DvY8y2mYyC44DTTm2qppoCzCw11LvDv7%3DdC6eVyRJG%3DeMw%40mail.gmail.com?utm_medium=email&utm_source=footer). > > > For more options, visit https://groups.google.com/d/optout. > > > -- > You received this message because you are subscribed to the Google Groups > "rspec" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected] > (mailto:[email protected]). > To post to this group, send email to [email protected] > (mailto:[email protected]). > To view this discussion on the web visit > https://groups.google.com/d/msgid/rspec/11fa1aa7-249a-429b-8cf5-ec94a4a30b57%40googlegroups.com > > (https://groups.google.com/d/msgid/rspec/11fa1aa7-249a-429b-8cf5-ec94a4a30b57%40googlegroups.com?utm_medium=email&utm_source=footer). > For more options, visit https://groups.google.com/d/optout. -- You received this message because you are subscribed to the Google Groups "rspec" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/rspec/27419AEAC05B43C9A90C257B0D4A458D%40jonrowe.co.uk. For more options, visit https://groups.google.com/d/optout.
