category

Rails標準のテスト準備

Railsのテストツールはminitestがバンドルされています。rails testコマンドでtest/ディレクトリ以下のテストを一式実行します。また、ファイル名を指定すると個別ファイル内のテストのみの実行も可能です。

Rails minitestの準備挙動

RailsのテストはRAILS_ENV=testという環境で実行され、DBもtest環境で指定された接続先を利用します。
そのため config/database.yml の設定やCREATE DATABASEなど、DBアクセスの確保があらかじめ必要です。

また、テスト実行時の準備動作として db/schema.rb が実行され、テーブルをセットアップします。
DBスキーマの管理手法として、Rails標準のマイグレーションを利用している場合は不要かもしれませんが、ridgepoleを利用している場合、schema.rbを最新の状態にしておく必要があります。
rails db:schema:dumpを実行するとschema.rbが更新されます。

fixture

テーブル作成後のデータロードはfixtureを通じて行われます。
デフォルトでは test/test_helper.rbのfixtures :allが設定されており、すべてのfixtureファイルをロードする挙動になります。

fixturesはrails generateした際に空の定義が生成されることがあり、NULLカラムに満ちたデータを作成する挙動になります。
DBテーブル定義でNOT NULL制約を指定しているカラムがあると、空のfixturesロード時にエラーになります。

そのため、中途半端に空のfixtureを置いた状態ではテストを実行できないケースが多々起こります。初期段階でデータを利用しないテストを実行したい場合はtest_helper.rbのfixtures設定をコメントアウトすれば、データロードを回避できます。

まとめ

まず、rails testコマンドを実行してみて、DBMS関連のエラーで停止する場合にはテスト環境の事前準備が完了していない可能性が高いと言えます。
DB接続、スキーマ、fixtureを確認することで、テスト時セットアップ動作のトラブルに対処できます。