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 runI need to figure out, but I think that must be simple.
For some reason, I also can't
import IExWatchTests.Helpersfrom.iex.exsBut 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.