EDIT: I came up with a even better way to debug Elixir code than using iex
, check it here.
Interactive Driven Development, or REPL Driven Development is a really good way to approach programming, specially for developers that get distracted easily with time being expend out the main development loop or flow.
A way to do it in Elixir is just to use the fswatch
as presented in Elixir Mix Test documentation, or using the excellent mix.test-watch library, but them don't work well with iex
, the Elixir REPL, so why not do something else.
So I created some modules that can be imported on your iex
through the ~/.iex.exs
file and get the same benefits.
Just insert it on your ~/.iex.exs
file:
And create a ~/.iex
directory, placing this file on it:
There is an explanition about how to use it on the @moduledoc
, but briefly you just need to call iex
prepending the ~/.iex
directory on the Elixir path:
ELIXIR_ERL_OPTIONS="-pa $HOME/.iex" MIX_ENV=test iex -S mix
The IExWatchTests.Helpers
that is imported on ~/.iex.exs
allows to call f
and s
and a
to run failed, stale and all tests respectively.
You can call w
to watch tests and uw
to unwatch.
There is a really simple throttle mechanism that disallow run the suite concurrently.
That is all. Enjoy!
Top comments (4)
Nice tip! Any idea on how to make
Mix.Tasks.Test.run([])
to work on umbrella projects? Mine always outputThere are no tests to run
I need to figure out, but I think that must be simple.
For some reason, I also can't
import IExWatchTests.Helpers
from.iex.exs
But if I comment this line and run it from iex, it works!
Yes, I wrote another post explaining why I concluded that this approach is less than ideal, because there is a lot of limitation on what you can do in
.iex.exs
. For example, there is a IEx.Helpers.import_if_available/2 to deal with it.