How to prevent mix test to start Application

Hello there!

First of all, I am a complete noob when it comes to Elixir, so the answer to this might be super basic but I need some help here!

I have an application with a supervision tree. In this tree there is a websocket client that will try to connect to a server when created. All good here, but the problem comes when I run mix test.

Running mix test apparently runs the supervision tree of my app and, obviously, my websocket client fails to connect to a server and triggers many errors.

Surprisingly my tests pass and mix test considers it a successful run, but I don’t because I don’t want all those error logs popping up on my CI!

The thing is, I don’t need this websocket client running tu run my tests. Any ideas what can I do here? And most important, why does the supervision tree starts on mix test?

Thank you!

There are a few options there:

  • write the children list of your app supervision tree to conditionally not start children that shouldn’t start in test environment.
  • configure your ws client to not log in test environment.
  • wrap your ws client around an adapter and mock it(using mox, probably) in tests.

I usually do the first one. using the configs for it. so my test.exs file has something like:

config :myapp, MyApp.SupChild,
enable: false,

and in the application.ex I have something like:


where load/1 checks the application config for the enable key.


You can see that in action with phoenix, which starts the TCP parts of an endpoint only if configured to do so using config :my_app, MyAppWeb.Endpoint, server: true. mix phx.server is just a mix task enabling that config before starting the application. If the config is missing the “server” won’t be started.


Thank you that actually makes a lot of sense and its super simple! I did it and it worked yeah :smiley: