前回は認証までだったので、今回はテストコード関連の以下のタスクをやっていきます。

  • Rubocopによる静的コードチェック
  • RSpecによるテストコード作成
  • TravisCIによるCI

Rubocop

Rubocopは静的コードチェックツールになります。インストールはGemfileに以下を記載して、bundle installすればOKです。

あとはコマンドを実行するだけで、Rails用のコマンドは以下になります。

.rubocop.ymlに記載する場合はこんな感じで記載します。

ActiveAdminで自動生成したコードやdbディレクトリ以下のコードを無視したい場合は以下のように設定します。

factory_girl

rspecの前にまずはfactory_girlをインストールします。factory_girlとはテスト用のレコードを作成するgemになります。

Railsで使う場合は以下をGemfileに書けばOK。

rspecでディレクトリを一通り作成したら、spec/factories/factory.rbを作成します。spec/factories/*.rbのファイルは自動的にロードされます。

spec/support/factory_girl.rbも作成します。support以下のファイルを自動的にロードするようにrspecのところで設定します。

こんな感じで呼び出すとfactoryで定義したレコードを作成できます。

RSpec

RSpecはBDDのフレームワークになります。

Railsの場合は以下をGemfileに記載してインストールします。

RSpecの初期設定は以下のコマンドで行います。これによってspecディレクトリが作成されます。

spec/rails_helper.rbを書き換え。supportディレクトリ以下のファイルを自動ロードして、テスト時のログを標準出力に出すようにします。これによってputsメソッドを使った、テスト時の簡易的なデバッグが出来ます。

spec/support/controller_macros.rbを作成します。Deviseの認証をテスト上で行うための仕掛けになります。sign_inメソッドの引数のuserはspecファイル毎に定義しています。

コントローラのテスト↓

ビューのテスト↓

Travis CI連携

CIサーバとも連携して自動テストをしてみます。今回はTravis CIを使います。

まずは.travis.ymlをアプリのルート直下に配置。

あとはTravis側でgitリポジトリを選択して有効化すればOK。pushされると自動的にテストが回ります。rspecをロードするとデフォルトのrakeタスクがspecになるようです。

テスト結果のステータスをREADMEに記述したい場合は、Travis CIのUI上で画像表示のMarkdownを取得すればOK

travisci_status_image_markdown

これだけだとテストを回すだけなので、Herokuへのデプロイもやっちゃいます。

まずはtravisコマンドをインストール

以下のコマンドで暗号化したAPI KEYを.travis.ymlにセットアップ

その他Herokuの設定を.travis.ymlに書く↓

あとはPushしてテストが回ってOKであれば自動デプロイしてくれます。Travis簡単すぎてヤバイ。

参考URL