Загрузка зависимостей микса, помеченных как тестовые, только в том случае, если MIX_ENV изначально не был настроен для тестирования

Я хочу программно запустить mix test задачу в моем приложении Elixir. Это можно сделать с помощью Mix.Tasks.Test.run/1, хотя попытка сделать это без предварительной установки переменной среды MIX_ENV приведет к отказу выполнения задачи.

Мы можем установить env с помощью System.put_env/2, но тогда приложение выйдет из строя, как только найдет ссылку на модуль, определенный в зависимости, помеченной как test only.

Как я могу загрузить эти зависимости в этой ситуации?


person lpil    schedule 28.04.2015    source источник


Ответы (1)


Мы можем установить env с помощью System.put_env / 2, но тогда приложение выйдет из строя, как только найдет ссылку на модуль, определенный в зависимости, помеченной как test only.

Это специально. Вам необходимо установить переменную среды до запуска Mix, иначе Mix загрузит неправильные зависимости.

Если вы создаете новую задачу, вы можете указать Mix, в какой среде лучше ее запускать, установив [preferred_cli_env: [my_task: :test]] в функции вашего проекта. Кроме этого, у вас нет другого выбора, кроме явной установки MIX_ENV.

person José Valim    schedule 28.04.2015
comment
Разве нельзя перезагрузить депы после изменения env? - person lpil; 29.04.2015
comment
Вы определенно могли бы. Но как насчет кода, который уже был загружен? Приложения, которые возможно были запущены? Я бы предпочел, чтобы моя среда была чистой, чем смесь кода разработки и тестирования. Некоторые фреймворки делают то, что вы упомянули, но в долгосрочной перспективе это просто причиняет боль. - person José Valim; 29.04.2015