在Elixir中,将测试文件放置在其相关模块旁边

时间:2018-07-26 14:32:15

标签: elixir ex-unit

典型的Elixir项目的结构如下:

project
|-- lib
|   `-- my_module.ex
`-- test
    |-- my_module_test.exs
    `-- test_helper.exs

在编写节点项目时,我希望将测试模块放在要测试的模块旁边。可以使用Jest这样的工具轻松配置:

project
|-- lib
|   |-- my_module.ex
|   `-- my_module.test.exs
`-- test
    `-- test_helper.exs

是否可以在Elixir / Exunit中进行类似的设置?

1 个答案:

答案 0 :(得分:2)

好的,为了将来的访问者,我将其作为答案。

混合文档explicitly states

  

从命令行调用mix test将在与项目*_test.exs目录中找到的模式test 相匹配的每个文件中运行测试。

似乎ExUnit的作者强烈劝阻开发人员将测试放在其他地方。正如@harryg发现的那样,它仍然是可能的。 project设置具有tests_path变量that is checked for where tests are to be found(模式为test_pattern),默认为"test", 分别"*_test.exs"

要将其重置为其他值,只需更新project回调,添加以下两行即可:

  def project do
    [
      app: @app,
      version: @version,
      elixir: "~> 1.6",
      start_permanent: Mix.env() == :prod,
      ...
      test_paths: ".",
      test_pattern: "*_test.exs" # or something else
    ]
  end