简体   繁体   中英

Is there a way to rerun the initial test/mix command again from within the iex prompt?

If I run a test with iex, like:

iex -S mix test test/path/file_test.exs

and it completes, it drops me into a regular iex prompt where it waits for a break point. Great! However I can't figure out how to re-run the test so I have to <Cc> <Cc> <up> <enter> to run it again. It's a bit of a pain and seems unnecessary.

I want to run it inside iex so that my pry breakpoints will work. Is there a way to rerun the initial test/mix command again from within the iex prompt?

There is a way to do that but that is very unattractive. Mix keeps track of all the tests that have been run indefinitely (until VM dies).So starting iex -S mix and executing Mix.Task.run "test' will work the first time around but will assume the "test" task already ran on the second invocation

ExUnit also has state that is assumed to be initialized once (with all the test suites to run) and gets emptied out as you run the tests. Unfortunately, that initialization happens at compile time of the test see ExUnit.Case source

 @doc false
  defmacro __before_compile__(_) do
    quote do
      if @ex_unit_async do
        ExUnit.Server.add_async_case(__MODULE__)
      else
        ExUnit.Server.add_sync_case(__MODULE__)
      end

      def __ex_unit__(:case) do
        %ExUnit.TestCase{name: __MODULE__, tests: @ex_unit_tests}
      end
    end
  end

Solution:

$MIX_ENV=test iex -S mix phx.server
iex(1)>Mix.Tasks.Test.run(["test file path"])
iex(2)>Kernel.ParallelCompiler.files(["test file path"]) 
iex(3)>Mix.Tasks.Test.run(["test file path"])

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM