LoginSignup
4
4

More than 5 years have passed since last update.

ESpecでBDDを快適に…mix test.watchのESpecクイックハック

Last updated at Posted at 2018-09-11

fukuoka.ex代表のpiacereです
今回もご覧いただいて、ありがとうございます:bow:

ElixirでBDD書けるESpecですが、mix test.watchが効かないため、いちいちコマンド打つのがメンドイのですが、mix test.watchをホンの少しいじれば動くので、deps配下をクイックハックしちゃいます:yum:

ちなみに、mix test.watchをクイックハックせず、ex_guardを使う方法もあるみたいです


:stars::stars::stars: お知らせ:Elixirもくもく会(リモート参加OK、入門トラック有)を今月末に開催します :stars::stars::stars:

「fukuoka.ex#14:Elixir/Phoenixもくもく会~入門もあるよ」を9/28(金)に開催します

前回は、ゲリラ的に募った「Zoomによるリモート参加」を、今回から正式に受け付けるようになりましたので、福岡以外の都心や地方からでも参加できます(申し込みいただいたら、追ってZoom URLをconnpassメールでお送りします)

また、これまではElixir/Phoenix経験者を対象とした、もくもく会オンリーでしたが、今回から、入門者トラックも併設し、fukuoka.exアドバイザーズ/キャストに質問できるようにアップグレードしました

お申込みはコチラから
https://fukuokaex.connpass.com/event/100659/
image.png

mix test.watchとESpecをインストール

まず適当なElixir PJで、mix test.watchと、ESpecをインストールします

mix.exsの「def deps do」配下の先頭に以下を追記してください

mix.exs
defmodule Zundokos.Mixfile do
  use Mix.Project

  defp deps do
    [
      { :espec, "~> 1.6.1", only: :test },
      { :mix_test_watch, "~> 0.8", only: :test, runtime: false }, 
    ]
  end

インストールします

mix deps.get

ESpecの初期化をします

set MIX_ENV=test
mix espec.init

deps配下のmix test.watchをESpec対応に改造

macOSやLinuxは、以下の行の「test」を「espec」に書き換えるだけです

【改造前】/deps/mix_test_watch/lib/mix_test_watch/config.ex
  @default_tasks ~w(test)

↓↓↓

【改造後】/deps/mix_test_watch/lib/mix_test_watch/config.ex
  @default_tasks ~w(espec)

Windowsは、ここが何故か別で定義されているので、以下のmixコマンド中の「test」を「espec」に書き換えます(これはissueを出した方が良いのかしら?w)

【改造前】/deps/mix_test_watch/lib/mix_test_watch/port_runner/port_runner.ex
    case :os.type() do
     {:win32, _} ->
       System.cmd("cmd", ["/C", "set MIX_ENV=test&& mix test"], into: IO.stream(:stdio, :line))

      _ ->
        System.cmd("sh", ["-c", command], into: IO.stream(:stdio, :line))
    end

↓↓↓

【改造後】/deps/mix_test_watch/lib/mix_test_watch/port_runner/port_runner.ex
    case :os.type() do
     {:win32, _} ->
       System.cmd("cmd", ["/C", "set MIX_ENV=test&& mix espec"], into: IO.stream(:stdio, :line))

      _ ->
        System.cmd("sh", ["-c", command], into: IO.stream(:stdio, :line))
    end

mix test.watchでESpecを自動実行させる

あとは、いつも通り、mix test.watchすれば、ファイル保存するたびにESpecが勝手に走るようになります

mix test.watch

これでESpecによるBDDが快適になりますね

p.s.「いいね」よろしくお願いします

よろしければ、ページ左上の image.pngimage.png のクリックをお願いしますー:bow:

4
4
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
4
4