简体   繁体   中英

Is there something like test_requires in Elixir's mix?

In Python's setup.py we can specify dependencies that should be downloaded and installed as eggs by specifying under test_requires the requirements. In Elixir's mix how do I specify dependencies that I want to only use for tests ?

Dependencies in Mix are placed inside a private function called deps , it is not a rule, it is only the default value of the deps entry in the project "section", see below:

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

You can declare a deps function for test's dependencies and set the deps entry above to deps(Mix.env) . This is a way to tell Mix to call deps with a param that come from MIX_ENV enviroment variable.

This snippet could help you to understand better, let me show you:

...

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

...

Notice that you can still have a default dependency list with defp deps(_) , in the case that none of the functions above was pattern-matched. ;)

Then you should call mix as:

MIX_ENV=test mix deps.get

This could not be the best way to do that, but I'm using it often and sounds simple to me.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM