仅当 MIX_ENV 最初未设置为 "test" 时才加载标记为测试的混合依赖项

Loading mix dependencies marked as test only when the MIX_ENV was not originally set to "test"

我希望在我的 Elixir 应用程序中以编程方式 运行 mix test 任务。这可以通过 Mix.Tasks.Test.run/1 来完成,尽管在没有首先设置 MIX_ENV 环境变量的情况下尝试这样做会导致任务拒绝 运行.

我们可以使用 System.put_env/2 设置 env,但是一旦应用程序找到对在标记为仅测试的依赖项中定义的模块的引用,应用程序就会崩溃。

在这种情况下如何加载这些依赖项?

We can set the env with System.put_env/2, but then the application will crash once it finds a reference to a module defined in a dependancy marked as test only.

这是故意的。 Mix启动前需要设置环境变量,否则Mix会加载错误的依赖。

如果您正在创建一个新任务,您可以通过在项目函数中设置 [preferred_cli_env: [my_task: :test]] 来告诉 Mix 运行 它的首选环境是什么。除此之外,除了明确设置 MIX_ENV 之外别无选择。