LaravelのPHPUnitで「PDOException: SQLSTATE[HY000] [1040] Too many connections」が起きた

概要

Laravelでテスト実行中に以下のエラーが出るようになり、少し悩んだ

※バージョンは「Laravel 5.5.44」

PDOException: SQLSTATE[HY000] [1040] Too many connections
  • エラーの発生箇所はPHPUnitで流しているケースの後半
  • エラーが起きたテストクラスを単独で実行するとエラーは発生しない

という状況のため、単純にテストケースごとにConnectionを切る方向で考えた。

参考

とりあえず他に悩んでる人がいないかググった。

qiita.com

github.com

対応

上記のQiitaの方は PDO::ATTR_PERSISTENT で対応したみたいだったが、

本番稼働中のサービスもあり、迂闊にConfigを変えるのは良くない気もしたので、

当初の想定通りに、テストケースごとにConnectionを切ることにした。

/*
 * @return void
 */
public function tearDown()
{
    \DB::connection()->disconnect(); // 追加
    parent::tearDown();
}

終わりに

RefreshDatabaseTrait をいろいろカスタマイズしており、$this->beginDatabaseTransaction(); が実行されていないことが原因だと思う