第一次在我的测试环境中编译时,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
我在 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