【问题标题】:Is there something like test_requires in Elixir's mix?Elixir 的组合中是否有类似 test_requires 的东西?
【发布时间】:2014-03-16 01:13:59
【问题描述】:

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

【问题讨论】:

    标签: elixir


    【解决方案1】:

    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
    

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

    【讨论】:

    • 这是 v0.12 之前的正确答案。在 v0.13 上,我们支持 :only 选项,因此您可以这样做:{:some_project, github: "...", only: [:dev, :test]}
    • 谢谢指点!我还没有切换到 v0.13,也没有注意到这一点。谢谢。
    猜你喜欢
    • 2021-09-29
    • 2016-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多