Current section
Files
Jump to
Current section
Files
lib/mix/tasks/test.cluster.ex
defmodule Mix.Tasks.Test.Cluster do
@moduledoc """
Run tests for a distributed application.
This mix task starts up a cluster of nodes before running the `Mix.Tasks.Test`
mix task. The number of nodes to start (besides the master node) can be set
using the "-count #" switch (defaults to 4). Each slave node will have the code
and application environment from the master node loaded onto it. All switches
for the `mix test` task will be passed along to it.
"""
use Mix.Task
@shortdoc "Runs a project's tests in a distributed environment"
@recursive true
@preferred_cli_env :test
def run(params) do
unless System.get_env("MIX_ENV") in ["test", "ci"] || Mix.env() in [:test, :ci] do
IO.puts(
"\n⚑ “mix test.cluster” is running in environment “#{Mix.env()}”, but it’d better be run in :test."
)
Mix.Tasks.Compile.run([])
end
Mix.Tasks.Run.Cluster.run([])
Process.sleep(1_000)
Mix.Tasks.Test.run(params)
DistributedEnv.stop()
end
end