LoginSignup
3
3

More than 5 years have passed since last update.

Especでファイル変更時に自動でテストを実行する方法

Posted at

状況

PhoenixFrameworkのprojectでEspec, ExMachinaの組み合わせでテストを書き始めたが、テストを書くたびにmix especを叩くのがだるい。そこで、rubyのguardみたいなことができないのか?と探してみた。

環境

Elixir 1.3.1
PhoenixFramework 1.1.6
Espec 0.8.22

解決方法

ex_guardを使う

手順

基本的にはREADMEに書いてある通りに進める。Espec実行のために設定を少し変更した。

ex_guardをプロジェクトに導入

test系のtoolは最新のものを使いたいので、githubを直接指定。また、開発環境で使うので:devを追加している。この辺は個人の好みで設定。

{:ex_guard, github: "slashmili/ex_guard", only: :dev}

設定用のファイルを追加

applicationのrootに.exguard.exsを配置する。設定はREADMEの設定を拝借して、少しだけ書き換えた。
READMEのサンプルからの変更点は、commandをmix especに変更したことと、watchの対象をex,exsのみにしたこと。

use ExGuard.Config

guard("unit-test")
|> command("mix espec")
|> watch(~r{\.(ex|exs)\z}i)
|> notification(:auto)

実行

下記コマンドで実行。後はひたすらspecを書きまくる。

mix guard

通知について

ex_guardは実行結果を通知することも可能。設定自体は下記4つがどれか使えればそれを利用する。という仕組み。

Terminal Title (Xterm)
TMux (Universal)
Terminal Notifier (mac only)
Notify Send (linux distros)

自分はOSX,tmuxを使っているので、ステータスラインにgreen, redがでることで満足していた。
がしかし、せっかくならOSXの通知で出したいなと思い、今はterminal-notifierを導入し、別terminalを開いてそこで個別に実行させている。

残念なところ

ファイルを個別に指定できない

.exguard.exsを見てもらうとわかるように、commandを固定で指定しているので、常に全てのspecを実行してしまっている。理想としては、個別のファイルも指定できるとうれしい。
自分が知らないだけかもしれないので、知っている方いたらコメントをお願いしますm(__)m

まとめ

ちょっと残念だけど、手でポチポチとコマンドを叩く手間は改善された。
こちらで紹介されていたmix-test.watchも試してみたけどうまくいかなかった。
とりあえずこの設定で運用しつつ、mix-test.watchもチェックしながらベストな方法を模索したい。

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3