About
railsではguardやguard-rspecを使ってファイルの変更をするたびに、テストの自動実行をしていましたが、elixirでも似たようなものがあるのでそれを使ってみたはなし。
lpil/mix-test.watch: Because TDD is awesome.
ちなみにライブラリを探す時には定番かもしれませんがawesome-elixirとしてまとめられているので、この中から探すといいと思います。
Getting started
mix.exs
にライブラリを追加してdeps.get
でインストールします
defp deps do
[{:mix_test_watch, "~> 0.2", only: :dev}]
end
$ mix deps.get
watchを開始する時はtest.watch
$ mix test.watch
mix test.watch
Running tests...
................
Finished in 0.6 seconds (0.4s on load, 0.1s on tests)
16 tests, 0 failures
Running Additional Mix Tasks
mix-test.watchはテスト成功後に別のmixタスクを実行することもできます。
Guardfileにrspecとrubocopを記述するのと同じ感じです。
rubyでいうrubocopに当たる、credoを動かしてみます。1
最初にインストールします
defp deps do
[{:mix_test_watch, "~> 0.2", only: :dev},
{:credo, "~> 0.3", only: [:dev, :test]}]
end
$ mix deps.get
注意:credoなど、追加したタスクはmix_test_watch内でMIX_ENV=test
として実行されるため、only: [:test]
がないとライブラリを見つけられず実行できません。最初ここで詰まりました。
Mix.configを書いてtestが成功した後に別のmixタスクが動くようにします。
use Mix.Config
config :mix_test_watch,
tasks: ["test",
"credo"]
$ mix text.watch
こんな感じで動きます。
credoは出力が見やすくておすすめです