在Elixir的混音中有类似test_requires的东西吗?

时间:2014-03-16 01:14:00

标签: elixir

在Python的setup.py中,我们可以通过在test_requires下指定要求来指定应下载并作为egg安装的依赖项。在Elixir的混合中,如何指定我只想用于测试的依赖项?

1 个答案:

答案 0 :(得分:6)

Mix中的依赖项放在名为deps的私有函数中,它不是规则,它只是deps“部分中project条目的默认值”,见下文:

def project do
 [ app: :teste,
    version: "0.0.1",
    elixir: "~> 0.12.5-dev",
    deps: deps ] # It's here!
end

您可以为测试的依赖项声明deps函数,并将上面的deps条目设置为deps(Mix.env)。这是告诉Mix使用来自deps环境变量的参数调用MIX_ENV的方法。

这个片段可以帮助您更好地理解,让我告诉您:

...

def project do
  [ app: :teste,
    version: "0.0.1",
    elixir: "~> 0.12.5-dev",
    deps: deps(Mix.env) ] # This is important :)
end

...

defp deps(:prod) do
   [ { :a_production_ready_dependency, github: "xpto/cool_project" } ] 
end

defp deps(:test) do
   [ { :some_project, github: "some_project/other" } ]
end

defp deps(_) do
   deps(:prod) ++ [ { :a_devel_dependency, github: "xpto_dev/cool_project_dev" } ]
end

...

请注意,在上述所有函数都没有模式匹配的情况下,您仍然可以使用defp deps(_)的默认依赖关系列表。 ;)

然后你应该将mix称为:

MIX_ENV=test mix deps.get

这可能不是最好的方法,但我经常使用它,听起来很简单。