MIX_ENV=test mix test is using runtime.exs

Hi there! I’m having an issue when running MIX_ENV=test mix test. To my knowledge it should use the test.exs file which I have hardcoded values for, but when I run my tests I notice its using runtime.exs instead - is there a way to force it to use the test.exs or am I missing something? Let me know if I can provide more information

#19 [15/15] RUN MIX_ENV=test mix test
#19 sha256:83e7457056ec38a0fe7cd22e594425c37935498ebd0a3bab75d6595cc52dcf8a
#19 1.049 Compiling 8 files (.ex)
#19 1.222 Generated app
#19 1.654 ** (System.EnvError) could not fetch environment variable "QUEUE_URL" because it is not set
#19 1.654     (elixir 1.14.5) lib/system.ex:706: System.fetch_env!/1
#19 1.654     /app/config/runtime.exs:22: (file)
#19 1.654     (stdlib 4.3.1.2) erl_eval.erl:748: :erl_eval.do_apply/7
#19 1.654     (stdlib 4.3.1.2) erl_eval.erl:961: :erl_eval.expr_list/7
#19 1.654     (stdlib 4.3.1.2) erl_eval.erl:290: :erl_eval.expr/6
#19 1.654     (stdlib 4.3.1.2) erl_eval.erl:282: :erl_eval.expr/6
#19 1.654     (stdlib 4.3.1.2) erl_eval.erl:283: :erl_eval.expr/6

First off, you don’t need to specify MIX_ENV=test when you run mix test unless you’re overwriting otherwise present environemnt variable of that name.

Secondly, it’s expected behavior. runtime.exs is executed at tuntime in all environments.

If you want to limit the execution of runtime.exs in anything but prod, you can add an if clause to it like this:

import Config

if config_env() in [:prod, :staging] do
  ...
end

The above would only execute the contents of the script in :prod or :staging envs.

5 Likes

thank you so much! appreciate the assistance