【发布时间】:2014-03-16 01:13:59
【问题描述】:
在 Python 的 setup.py 中,我们可以通过在 test_requires 下指定要求来指定应该作为鸡蛋下载和安装的依赖项。在 Elixir 的组合中,我如何指定我只想用于测试的依赖项?
【问题讨论】:
标签: elixir
在 Python 的 setup.py 中,我们可以通过在 test_requires 下指定要求来指定应该作为鸡蛋下载和安装的依赖项。在 Elixir 的组合中,我如何指定我只想用于测试的依赖项?
【问题讨论】:
标签: elixir
Mix 中的依赖是放在一个名为deps 的私有函数中,这不是一个规则,它只是project“部分”中deps 条目的默认值,见下文:
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 使用来自 MIX_ENV 环境变量的参数调用 deps 的方法。
这个sn-p可以帮助你更好地理解,让我告诉你:
...
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
这可能不是最好的方法,但我经常使用它,对我来说听起来很简单。
【讨论】:
:only 选项,因此您可以这样做:{:some_project, github: "...", only: [:dev, :test]}。