gpt4 book ai didi

elixir - 在一个进程中多次运行 ExUnit 测试时如何避免 "warning: redefining module Foo"

转载 作者:行者123 更新时间:2023-12-04 05:51:44 25 4
gpt4 key购买 nike

我希望能够在一个正在运行的进程中多次运行 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 静音之类的方法的情况下,我如何才能使这些警告静音或避免这些警告?

似乎有一个编译器标志可用于抑制这些警告,但没有明确的公共(public) 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

最佳答案

经过一些反复试验,这是适合我的解决方案:

Code.compiler_options(ignore_module_conflict: true)

干杯!

关于elixir - 在一个进程中多次运行 ExUnit 测试时如何避免 "warning: redefining module Foo",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36926388/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com