LoginSignup
8
6

More than 5 years have passed since last update.

Phoenixでテストをwatchして自動テストをする

Last updated at Posted at 2016-04-03

About

railsではguardguard-rspecを使ってファイルの変更をするたびに、テストの自動実行をしていましたが、elixirでも似たようなものがあるのでそれを使ってみたはなし。

lpil/mix-test.watch: Because TDD is awesome.

ちなみにライブラリを探す時には定番かもしれませんがawesome-elixirとしてまとめられているので、この中から探すといいと思います。

Getting started

mix.exsにライブラリを追加してdeps.getでインストールします

mix.exs
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

rrrene/credo: A static code analysis tool for the Elixir language with a focus on code consistency and teaching.

最初にインストールします

mix.exs
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タスクが動くようにします。

config/dev.ex
use Mix.Config

config :mix_test_watch,
  tasks: ["test",
          "credo"]
$ mix text.watch

こんな感じで動きます。
credoは出力が見やすくておすすめです



  1. mix-test.watchの開発者が作っているDogmaもあるが、credoの方が出力の見た目がいい 

8
6
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
8
6