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

Low*_*ong 1 elixir

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

Gue*_*des 6

Mix中的依赖项被放置在一个名为的私有函数中deps,它不是一个规则,它只是"section"中deps条目的默认值project,见下文:

def project do
 [ app: :teste,
    version: "0.0.1",
    elixir: "~> 0.12.5-dev",
    deps: deps ] # It's here!
end
Run Code Online (Sandbox Code Playgroud)

您可以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

...
Run Code Online (Sandbox Code Playgroud)

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

然后你应该打电话给mix:

MIX_ENV=test mix deps.get
Run Code Online (Sandbox Code Playgroud)

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

  • 这是直到v0.12的正确答案.在v0.13上,我们支持`:only`选项,所以你可以这样做:`{:some_project,github:"...",只有:[:dev,:test]}`. (6认同)