macOS Catalina 10.15.7 Ruby on Rails 6.0.0 RSpec 4.0.1 pry rails 0.3.9 FactoryBot 6.1.0
console
Failure/Error: _query(sql, @query_options.merge(options))
ActiveRecord::StatementInvalid:
Mysql2::Error: MySQL client is not connected
Apparently the connection with the MySQL client has not been established.
As far as the definition is concerned, it seems that this error occurs when the network socket (file descriptor) is disabled even though the client is initialized. About "MySQL client is not connected" in Mysql2
Looking at the test execution results, the test was successful halfway, so I checked the test contents while stopping the process with binding.pry
for the time being, and for some reason all the tests were successful.
console
Finished in 16.16 seconds (files took 2.21 seconds to load)
15 examples, 0 failures
Since the error started to occur at the timing when the description of FactoryBot instance generation was increased, I thought that there was a possibility that the processing was stopped due to the load applied here.
I decided to make the process wait with sleep
at the timing of creating an instance.
RSpec.describe OrderItem, type: :model do
describe 'Save purchase information' do
before do
@user = FactoryBot.create(:user)
@item = FactoryBot.create(:item)
@order_item = FactoryBot.build(:order_item)
sleep 0.1 # 0.Wait 1 second
end
#abridgement
The test is now stable and successful without any errors.
It was also possible to deal with it by writing the following in config/environments/test.rb
.
config/environments/test.rb
Rails.application.configure do
config.active_job.queue_adapter = :inline
#abridgement
end
-About "MySQL client is not connected" in Mysql2 -How to use sleep in Ruby [For beginners]