我可以使用带有 Mix 的 ExUnit 将辅助模块拆分成不同的文件吗?

Can I split helper modules into different files using ExUnit with Mix?

几次失败的尝试和文档 here 让我相信我必须在 test/test_helper.exs 或嵌套在 a 下的其他 test/*.exs 文件之一中定义辅助模块我的混合项目中的模块(use ExUnit.Case)。有没有办法在它们自己的文件中定义这些模块,以便测试可以使用它们,而不会弄乱 test/test_helper.exs 或将它们放在 lib/ 下?

在您的 mix.exs 文件中,您在项目声明中为不同的环境定义了不同的路径(在 Mix.Project.project/0 回调中,关键字 elixirc_paths:

defmodule MyApp.MixProject do
  use Mix.Project

  def project do
    [
      ...
      elixirc_paths: elixirc_paths(Mix.env()),
      ...
    ]
  end

那你针对不同的环境提供不同的子句:

defp elixirc_paths(:test), do: ["lib", "test/helpers"]
defp elixirc_paths(_), do: ["lib"]

以上路径将添加到 Elixir 编译的内容中,test/helpers 目录中的所有代码将在运行时 当 运行 test 中的项目时可用] 仅限环境.