1

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

在我的测试配置中,我替换了包含函数的“模块”,如下所示:

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

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

有没有更好的方法来“劫持”未显示此警告的功能?

4

1 回答 1

2

在你的 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"]

并将您的支持模块添加到测试/支持

于 2016-09-20T01:00:25.273 回答