I have a small function with some branching logic and I have some tests for it. I would like to use the erlang debugger when I run a given test to make sure I am executing the correct code.
Lets assume we are testing DebuggerTest.greet/1
:
defmodule DebugerTest do
def greet(greeting) do
if greeting == "Hola" do
str = "#{greeting} mundo!"
IO.puts(str)
:spanish_greet
else
str = "#{greeting} world!"
IO.puts(str)
:normal_greet
end
end
end
Now, this function has some branching logic, and the code is overall horrible, but it does give us a lot of juicy executable lines that we attach a breakpoint to.
These are the tests I am running:
defmodule DebugerTestTest do
use ExUnit.Case
doctest DebugerTest
test "greets the world" do
assert DebugerTest.greet("Hello") == :normal_greet
end
test "greets the world in spanish" do
assert DebugerTest.greet("Hola") == :fail_greet
end
end
As you can see, my spanish greeting test will fail. However, I want to find that out using the erlang debugger: http://blog.plataformatec.com.br/2016/04/debugging-techniques-in-elixir-lang/
Given that I am only interested in running the failing test, I change my code to:
@tag :wip
test "greets the world in spanish" do
assert DebugerTest.greet("Hola") == :fail_greet
end
And then I run mix test --only wip
.
There, now I am running only the failing test. But I am still not using the debugger.
To try to fix this I tried running the tests via an iex shell iex -S mix test --only wip
but the run is automated and it ends before I can setup the debugger:
:debugger.start()
:int.ni(DebugerTest)
:int.break(DebugerTest, 3)
How can I run the erlang debugger when using mix test
?
Turns out that if I modify my test in the following manner:
@tag :wip
test "greets the world in spanish" do
:debugger.start()
:int.ni(DebugerTest)
:int.break(DebugerTest, 3)
assert DebugerTest.greet("Hola") == :fail_greet
end
And then run it with mix test --trace --only wip
the execution will launch the debugger and wait for it to finish.
Original answer can be found here:
https://elixirforum.com/t/how-to-run-exunit-tests-with-erlang-debugger/41162/4?u=fl4m3ph03n1x