diff --git a/lib/mix/lib/mix/tasks/test.coverage.ex b/lib/mix/lib/mix/tasks/test.coverage.ex index 6e43c14fd27..4d86d6ddddb 100644 --- a/lib/mix/lib/mix/tasks/test.coverage.ex +++ b/lib/mix/lib/mix/tasks/test.coverage.ex @@ -288,9 +288,17 @@ defmodule Mix.Tasks.Test.Coverage do output = Keyword.get(opts, :output, "cover") File.mkdir_p!(output) - for mod <- modules do - {:ok, _} = :cover.analyse_to_file(mod, ~c"#{output}/#{mod}.html", [:html]) - end + modules + |> Enum.map(fn mod -> + pid = :cover.async_analyse_to_file(mod, ~c"#{output}/#{mod}.html", [:html]) + Process.monitor(pid) + end) + |> Enum.each(fn ref -> + receive do + {:DOWN, ^ref, :process, _pid, _reason} -> + :ok + end + end) Mix.shell().info("Generated HTML coverage results in #{inspect(output)} directory") end