Rails RspecでDB接続失敗時のテストを行う方法

Rspecは便利。Railsを使っているのにRspecを使っていない人はニワカか変態です。

RspecはMockやFeature等様々なテストを記述することができるものの、外部システムが落ちてしまっているときのテストを行うのは難しい。

かと言ってここを手作業でやっても仕方がない。

今回は、RspecでDBサーバが落ちてしまったケースを想定したテストをする。

DB接続失敗した際に特定のHTTPステータスコードを返すといった仕様があるとして、そのテストを行う方法を書き溜める。

リクエストの直前に別のDBに接続してしまうという方法。

config/database.ymlに存在しない接続先を設定

後はこの接続先にリクエスト直前につないでしまう。

リクエスト後に、テスト用のDBに再接続することを忘れないように。忘れると以降のRspecが全部失敗します。

このやり方にも課題はあって、処理中にDBが停止したとかのテストはできない。