我希望能够在一个正在运行的进程中多次运行 ExUnit 测试,例如iex
.
为此,我的代码看起来有点像这样:
def test do
# Unload test files
["test"]
|> Mix.Utils.extract_files("*")
|> Enum.map(&Path.expand/1)
|> Code.unload_files
# Reenable tasks
~w(loadpaths deps.loadpaths test)
|> Enum.map(&Mix.Task.reenable/1)
# Run the test suite
Mix.Task.run("test", args)
# Cleanup
:elixir_config.put(:at_exit, [])
end
test/my_app/foo_test.exs:1 warning: redefining module FooTest
这可行,但会为我的测试文件中定义的每个模块打印。
我认为当我从:elixir_code_server
这些警告中卸载这些文件时,不会引发这些警告,但事实并非如此。
在不诉诸诸如使 stderr 静音之类的方法的情况下,我如何才能使这些警告静音或避免这些警告?
似乎有一个编译器标志可用于抑制这些警告,但没有明确的公共 API 用于设置此标志。似乎我们可以禁用这些警告消息,没有明确的 API 可以这样做。
见elixir_compiler:get_opt/1
https://github.com/elixir-lang/elixir/blob/master/lib/elixir/src/elixir_compiler.erl#L8-L13
查看elixir_module:check_module_availability/3
它在哪里检查elixir_compiler:get_opt(ignore_module_conflict)
https://github.com/elixir-lang/elixir/blob/master/lib/elixir/src/elixir_module.erl#L408-L418