RSpec에 의한 테스트 실행 중 에러 발생 ~Lost connection to MySQL server during query~

3092 단어 MySQLRails6RSpecRails

오류 내용



Rails에서 개발 중인 애플리케이션의 테스트를 RSpec에서 실시하고 있었는데, 갑자기 테스트가 실패하게 되었다.
다만, 결과를 확인하면 전반의 테스트는 성공하고 있으며, 후반의 테스트는 모두 실패하고 있다.


그리고 실패한 네 가지 테스트 중 오류 문장은 다음과 같이 표시되었습니다.
① Mysql2::Error::ConnectionError: Lost connection to MySQL server during query
② Mysql2::Error: MySQL client is not connected
③ Mysql2::Error: MySQL client is not connected
④ Mysql2::Error: MySQL client is not connected

오류 문장 고려



첫 번째 에러 문장의 내용은 "쿼리 (명령의 것. 여기에서는 테스트 실행의 것.) 실행 중에 MySQL 서버와의 연결이 끊어졌다"는 것이므로 두 번째 이후의 오류는 모두 MySQL과의 접속이 없기 때문에 에러가 되어 있다고 생각된다.

원인



그렇다면 테스트 인스턴스를 생성 할 때 여러 인스턴스를 생성하는 설명을하면 테스트가 실행되는 동안 일부 부하가 발생하여 테스트가 실패 할 수 있습니다.
이번에는 쿼리를 실행한 후 처리가 끝날 때까지 모든 테스트를 실행할 수 없어 결과가 반환되어 버렸다는 느낌일까요?

해결책



이하의 일문을 테스트 파일에 기술하면 무사히 테스트가 통과했습니다.

spec/models/order_shipping_spec.rb
require 'rails_helper'

RSpec.describe OrderShipping, type: :model do
  before do
    # 自分で関連付けを定義するためにuserインスタンスとitemインスタンスを生成
    user = FactoryBot.create(:user)
    item = FactoryBot.create(:item)
    # 関連付けを定義しながら@order_shippingを生成
    @order_shipping = FactoryBot.build(:order_shipping, user_id: user.id, item_id: item.id)
    # この一文を追加
    sleep 0.1
  end

sleep 메소드는, 일정 시간, ruby ​​프로그램의 실행을 정지하는 메소드입니다.
일정 시간이 경과하면 다음 행에서 프로그램이 다시 시작됩니다.
(이 장소에 쓰면 테스트가 성공했다는 것은 인스턴스를 제대로 만들고 있지 않았다는 것?)

마지막으로



솔직히 말해서 이번 오류의 원인은 확인할 수 없다.
다만, 이번 테스트하고 있는 모델은 실은 폼 오브젝트 패턴을 이용해 작성한 클래스에 대한 테스트로, Rails의 모델과는 약간 다르다.
그래서 FactoryBot에서 어소시에이션의 기술을 할 수 없고, 단위 테스트 파일내에서 스스로 관련하는 인스턴스를 만들고 있는데, 이것이 관계 있는 것일까?

원인 해명할 수 있으면 이 기사를 수정하고 싶습니다!

좋은 웹페이지 즐겨찾기