2015-04-28 30 views
3

我希望以编程方式在我的Elixir应用程序中运行mix test任务。这可以通过Mix.Tasks.Test.run/1来完成,尽管在未首先设置MIX_ENV环境变量的情况下尝试这样做会导致任务拒绝运行。仅当MIX_ENV最初未设置为“测试”时才加载标记为测试的混合相关性

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

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

回答

3

我们可以使用System.put_env/2来设置env,但是一旦它找到了一个被标记为只测试的依赖项中定义的模块的引用,它就会崩溃。

这是故意的。您需要在Mix开始前设置环境变量,否则Mix将加载错误的依赖关系。

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

+0

一旦env被更改,是不可能重新加载deps的? – lpil

+1

你绝对可以。但是那些已经加载的代码呢?可能已启动的应用程序?我更喜欢我的环境是“干净的”,而不是混合使用开发和测试代码。一些框架可以完成你所提到的内容,但这只会导致长期的痛苦。 –

+0

非常好的一点。非常感谢你。 :) – lpil