第一次在我的测试环境中编译时,Mix 警告我有一个未定义的模块。如何忽略它?

Mix warns me about an undefined module the first time I compile in my test environment. How to ignore it?

我在 test/ 目录中定义了一个模块,用于模拟输出随机值的函数 :crypto.strong_rand_bytes/1

在我的测试配置中,我替换了包含如下函数的 "module":

config :lottosim, :crypto, Lottosim.Test.RandomQueue


lib/目录下的模块通过定义一个模块属性来引用这个配置:

@crypto Application.get_env(:lottosim, :crypto) || :crypto

然后调用函数:

@crypto.strong_rand_bytes(1).


因为 test/ 目录中的模块 RandomQueue 是在我的 lib/ 目录中的模块之后编译的,所以在我第一次使用 MIX_ENV=test 编译我的项目时会显示以下警告:

warning: function Lottosim.Test.RandomQueue.strong_rand_bytes/1 is undefined (module Lottosim.Test.RandomQueue is not available)

实际测试时 运行,模块定义正确,一切通过。

此外,警告不再显示在以下编译中,每次我只显示一次 运行 mix clean.

有没有办法忽略这个警告?

有没有更好的方法"hijacking"不显示此警告的函数?

在您的 mix.exs 中将 elixirc_paths 添加到您的项目配置中:

def project do
  [app: :whatever,
   version: "0.1.0",
   elixir: "~> 1.3",
   elixirc_paths: elixirc_paths(Mix.env),
   build_embedded: Mix.env == :prod,
   start_permanent: Mix.env == :prod,
   deps: deps()]
end

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

并将您的支持模块添加到 test/support